我不明白,为什么eval
是这样的:
"123 #{456.to_s} 789" # => "123 456 789"
eval('123 #{456.to_s} 789') # => 123
我怎样才能到插值内eval
一个字符串?
更新:
谢谢朋友们。有效。
所以,如果你有#{}
那以后要EVAL一个字符串变量,你应该这样做如下解释:
string = '123 #{456} 789'
eval("\"" + string + "\"")
# => 123 456 789
要么
string = '123 #{456} 789'
eval('"' + string + '"')
# => 123 456 789
这是怎么回事,是EVAL正在评估字符串作为源代码。当您使用双引号,该字符串插值
eval '"123 #{456.to_s} 789"'
# => "123 456 789"
然而,当你使用单引号,没有插,因此#
注释的开始,你会得到
123 #{456.to_s} 789
# => 123
因为它是参数的方法eval
调用之前的字符串插值发生。
还要注意456.to_s
是不必要的,你可以做#{456}
。
你自找的:
eval('"123 #{456.to_s} 789"')
。 。 。希望你可以看到为什么?
通过从使用eval interpretter的代码是完全一样的,如果你写了它(到irb
,或作为.rb
文件的一部分),所以如果你想要一个eval输出一个字符串值,评估字符串必须包括引号是让里面一个String
表达。