And in a more OO way, you can use
irb(main):001:0> class String
irb(main):002:1> def interpolate(caller)
irb(main):003:2> caller.instance_eval('"' + self + '"')
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> @toto = "afdgfd"
=> "afdgfd"
irb(main):007:0> '123 #{@toto}'.interpolate(self)
=> "123 afdgfd"
ciao
Denis
Neville Burnell wrote:
> How about:
>
> irb(main):001:0> n = 1
> => 1
> irb(main):002:0> s = 'n = #{n}'
> => "n = \#{n}"
> irb(main):003:0> puts eval('"' + s + '"')
> n = 1
> => nil
>
> -----Original Message-----
> From: Taisuke Yamada [mailto:tyamadajp / list.rakugaki.org]
> Sent: Friday, 22 April 2005 4:35 PM
> To: ruby-talk ML
> Subject: Clean way to dynamically expand string with "#{expression}"?
>
> Hi.
>
> I'm trying to find a clean way to expand string with "#{...}".
> What I want to do is essentially as follows:
>
> data = 123
> expr = 'data = #{data}'
>
> puts dosomething(expr)
>
> and get 'data = 123' as a result. Actual content of 'expr' can be
> anything, as long as it is a String object.
>
> I came up with following:
>
> puts eval(%Q{"#{expr.gsub('"', '\"')}"})
>
> But this is ugly, and I'm wondering if there's some other, cleaner way
> to do the same thing.
>
> Can anyone enlighten me?
>
> Best Regards,
> --
> Taisuke Yamada