12

なぜこのように機能するのかわかりませんeval

"123 #{456.to_s} 789" # => "123 456 789"
eval('123 #{456.to_s} 789') # => 123

内部の文字列に補間するにはどうすればよいevalですか?

アップデート:

皆ありがとう。出来た。

したがって、#{}後で評価したい文字列変数がある場合は、以下で説明するように実行する必要があります。

string = '123 #{456} 789' 
eval("\"" + string + "\"")
# => 123 456 789

また

string = '123 #{456} 789' 
eval('"' + string + '"')
# => 123 456 789
4

2 に答える 2

22

何が起こっているのか、eval は文字列をソース コードとして評価しています。二重引用符を使用すると、文字列が補間されます

eval '"123 #{456.to_s} 789"'
# => "123 456 789"

ただし、一重引用符を使用すると、補間がないため#、コメントが開始され、次のようになります。

123 #{456.to_s} 789
# => 123

文字列の補間evalは、メソッドへのパラメーターであるため、呼び出しの前に発生します。

456.to_sまた、は不要であることに注意してください#{456}

于 2013-06-18T13:12:30.037 に答える
5

あなたが欲しかった:

eval('"123 #{456.to_s} 789"')

. . . うまくいけば、その理由がわかりますか?

irbeval からインタープリターに渡されるコードは、(ファイルに、またはファイルの一部として)記述した場合とまったく同じ.rbであるため、eval で文字列値を出力する場合は、評価する文字列に、その中の表現 a String.

于 2013-06-18T13:12:05.750 に答える