Sometimes it's better to cache the /#{var}/ as in this case, new
regexp object is created on each pass through the cycle.
That might hurt the performance a bit. So:
var = "hello"
+ var_re = /#{var}/
File.foreach "file.txt" do |line|
- if /#{var}/ =~ line
+ if var_re =~ line
puts "found it"
break
end
end
(This might apply for 1.8 MRI only, other interpreters might be
different): When the regex literal contains #{}, the object
is created on each pass through the code. In the other case it's
created only once.
Jano
···
On Dec 6, 2007 12:49 PM, Lee Jarvis <ljjarvis@gmail.com> wrote:
Or, optionally, the Pickaxe book section on strings.
--Jeremy
···
On 12/6/07, Peter Loftus <loftuz@gmail.com> wrote:
if /#{var1}/ =~ line
when i enter # thats just comments out the whole line
any reason for using #
Jeremy McAnally wrote:
> You can use string interpolation like you can with double quoted
> strings.
>
> var1 = "hello"
>
> File.foreach "file.txt" do |line|
> if /#{var1}/ =~ line
> puts "found it"
> break
> end
> end
>
--
Posted via http://www.ruby-forum.com/\.
(This might apply for 1.8 MRI only, other interpreters might be
different): When the regex literal contains #{}, the object
is created on each pass through the code. In the other case it's
created only once.
True, you could use the Regexp class also then..
var = 'hello'
revar = Regexp.new(var)
if revar =~ line
#..
end
or perhaps
var = 'hello'
File.foreach 'file.txt' do |line|
if Regexp.new(var) =~ line
puts 'found it'
break
end
end
If you don't care how many times its created and you don't want to use
the '#' in your regexp matches because your IDE doesn't know any better.
You can also use the /o option, which tells Ruby to compile the Regex
only once:
var = "hello"
File.foreach "file.txt" do |line|
if /#{var}/o =~ line
puts "found it"
break
end
end
···
On Dec 6, 6:38 am, Jano Svitok <jan.svi...@gmail.com> wrote:
On Dec 6, 2007 12:49 PM, Lee Jarvis <ljjar...@gmail.com> wrote:
Sometimes it's better to cache the /#{var}/ as in this case, new
regexp object is created on each pass through the cycle.
That might hurt the performance a bit. So:
> var = "hello"
+ var_re = /#{var}/
> File.foreach "file.txt" do |line|
- if /#{var}/ =~ line
+ if var_re =~ line
> puts "found it"
> break
> end
> end
(This might apply for 1.8 MRI only, other interpreters might be
different): When the regex literal contains #{}, the object
is created on each pass through the code. In the other case it's
created only once.