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

Asa*_*uhi 0 ruby string-interpolation

以下代码是rubykoans about_classes.rb的摘录:

class Dog7
  def initialize(initial_name)
    @name = initial_name
  end
  def to_s
    @name
  end
end
Run Code Online (Sandbox Code Playgroud)

我创建了一个实例Dog7:

fido = Dog7.new("Fido")
Run Code Online (Sandbox Code Playgroud)

我理解以下内容:

"My dog is " + fido.to_s # => "My dog is Fido"
"My dog is #{fido.to_s}" # => "My dog is Fido"
Run Code Online (Sandbox Code Playgroud)

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

"My dog is #{fido}" # => "My dog is Fido"
Run Code Online (Sandbox Code Playgroud)

fido 不是一个字符串.

Can*_*ide 6

该声明#{fido}含蓄地调用fido.to_s.这就是为什么你得到"Fido",这是它的价值@name.

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

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

"My dog is %s" % fido
Run Code Online (Sandbox Code Playgroud)

这几乎是#{}语法的另一个版本.上面,%s指示格式化程序需要调用to_sfido.这样做是多余的"My dog is %s" % fido.to_s,但它仍然有效.