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 Worm 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
--
Posted via http://www.ruby-forum.com/\.
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
On Aug 26, 2007, at 11:20 AM, Thomas Worm wrote:
a = 5
b = "#{a}"
puts ba = 6
puts bReturns:
5which is clear to me, why. But is there a way to define such a string and
interpolate it at a later time?
Thomas Worm wrote:
a = 5
b = "#{a}"
puts ba = 6
puts bReturns:
5which 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
=> 5
q = lambda{"#{a}"}
=> #<Proc:0xb721d4d4@(irb):7>
q.call
=> "5"
a = 6
=> 6
q.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.
--
Phlip
Test Driven Ajax (on Rails) [Book]
"Test Driven Ajax (on Rails)"
assert_xpath, assert_javascript, & assert_ajax
Many thanks for the quick help !!!
Thomas
On Sun, 26 Aug 2007 18:38:46 +0900, Stefan Rusterholz 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