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}.
你自找的:
eval('"123 #{456.to_s} 789"')
Run Code Online (Sandbox Code Playgroud)
。。。希望你能明白为什么?
irb从 eval 传递到解释器的代码与您将其写入(写入或作为文件的一部分)完全相同.rb,因此如果您希望 eval 输出字符串值,则您计算的字符串必须包含引号,使其中的表达式 a String.