Ruby:带字符串插值的eval

Ale*_*kin 10 ruby string eval string-interpolation

我不明白,为什么会eval这样:

"123 #{456.to_s} 789" # => "123 456 789"
eval('123 #{456.to_s} 789') # => 123
Run Code Online (Sandbox Code Playgroud)

如何插入内部的字符串eval

更新:

谢谢你,朋友们.有效.

因此,如果您有一个字符串变量#{},您希望稍后进行评估,则应按照以下说明进行操作:

string = '123 #{456} 789' 
eval("\"" + string + "\"")
# => 123 456 789
Run Code Online (Sandbox Code Playgroud)

要么

string = '123 #{456} 789' 
eval('"' + string + '"')
# => 123 456 789
Run Code Online (Sandbox Code Playgroud)

AJc*_*dez 20

发生了什么,是eval正在将字符串作为源代码进行评估.使用双引号时,将对该字符串进行插值

eval '"123 #{456.to_s} 789"'
# => "123 456 789"
Run Code Online (Sandbox Code Playgroud)

但是,当你使用单引号时,没有插值,因此#开始注释,你得到

123 #{456.to_s} 789
# => 123
Run Code Online (Sandbox Code Playgroud)

字符串插值在eval调用之前发生,因为它是方法的参数.

还要注意这456.to_s是不必要的,你可以这样做#{456}.


Nei*_*ter 5

你自找的:

eval('"123 #{456.to_s} 789"')
Run Code Online (Sandbox Code Playgroud)

。。。希望你能明白为什么?

irb从 eval 传递到解释器的代码与您将其写入(写入或作为文件的一部分)完全相同.rb,因此如果您希望 eval 输出字符串值,则您计算的字符串必须包含引号,使其中的表达式 a String.