使用类的名称进行字符串插值是什么意思?

时间:2015-07-20 16:35:38

标签: ruby string-interpolation

以下代码摘自rubykoans about_classes.rb:

class Dog7
  def initialize(initial_name)
    @name = initial_name
  end
  def to_s
    @name
  end
end

我创建了Dog7的实例:

fido = Dog7.new("Fido")

我理解以下内容:

"My dog is " + fido.to_s # => "My dog is Fido"
"My dog is #{fido.to_s}" # => "My dog is Fido"

我不明白为什么以下插值有意义并给出相同的结果:

"My dog is #{fido}" # => "My dog is Fido"

fido不是字符串。

1 个答案:

答案 0 :(得分:6)

语句#{fido}隐式调用fido.to_s。这就是为什么你得到" Fido",这是@name的价值。

实际上,"My dog is #{fido.to_s}"是多余的,因为#{}位会调用to_s

以下是格式化字符串的另一种方法:

"My dog is %s" % fido

这几乎是#{}语法的另一个版本。在上方,%s向格式化程序表明需要在to_s上调用fido。 <{1}}是多余的,但它仍然有用。

相关问题