a = 5
b = “#{a}”
puts b
a = 6
puts b
Returns:
5
5
which is clear to me, why. But is there a way to define such a string
and
interpolate it at a later time?
Thomas
a = 5
b = “#{a}”
puts b
a = 6
puts b
Returns:
5
5
which is clear to me, why. But is there a way to define such a string
and
interpolate it at a later time?
Thomas
Thomas W. wrote:
a = 5
b = “#{a}”
puts ba = 6
puts bReturns:
5
5which is clear to me, why. But is there a way to define such a string
and
interpolate it at a later time?Thomas
a = 5
b = proc { “a is now: #{a}” }
def b.to_s; call; end
puts b # !> a is now: 5
a = 6
puts b # !> a is now: 6
Enjoy
Regards
Stefan
On Sun, 26 Aug 2007 18:38:46 +0900, Stefan R. wrote:
a = 5
b = proc { “a is now: #{a}” }
def b.to_s; call; end
puts b # !> a is now: 5
a = 6
puts b # !> a is now: 6
Many thanks for the quick help !!!
Thomas
On Aug 26, 2007, at 11:20 AM, Thomas W. wrote:
which is clear to me, why. But is there a way to define such a
string and
interpolate it at a later time?
You normally use a templating system, for example:
require ‘erb’
b = ERB.new(“a is <%= a %>”)
a = 5
puts b.result(binding) # -> a is 5
a = 6
puts b.result(binding) # -> a is 6
– fxn
Thomas W. wrote:
which is clear to me, why. But is there a way to define such a string and
interpolate it at a later time?
You are asking how to do a “block closure”. Study that, because it’s a
major
Ruby topic and a very good design technique. I have not yet found a way
to
over-use or abuse blocks in Ruby!
A ‘lambda’ is one of the block systems that can bond with the variables
around it. So stick your string evaluator into a lambda, and call it:
a = 5
=> 5q = lambda{"#{a}"}
=> #Proc:[email protected]:7(irb)q.call
=> “5”a = 6
=> 6q.call
=> “6”
Block closures are a very good design technique because a has a very
limited
scope over a very long lifespan. We could have stored that q and used it
later. So a becomes very encapsulated.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs