正如问题所问,它只是调用to_s
嵌入表达式的返回值吗?
像这样?
"1, 2, #{1 + 2}" == "1, 2, " + 3.to_s
还是这里有更多的事情发生?
是的,它调用to_s
表达式的结果。尝试一下。
:001> class Monkey
:002> def to_s
:003> "monkey"
:004> end
:005> end
=> nil
:006> m = Monkey.new
=> monkey
:007> "I am a #{m}"
=> "I am a monkey"
它实际上只是一个占位符,“嘿,这里有一些 ruby 代码需要评估并转换为字符串。” 如果您完全熟悉 C 风格的语言,那么它与以下内容几乎相同:
printf("1, 2, %d", 1+2);