8

""Ruby 用双引号 ( ) 与.初始化新字符串的方式有什么区别String.new?出于好奇和实验的目的,我覆盖了String#initialize

class String
  def initialize
    puts "I <3 bananas" # they're delicious!
  end
end

我想弄清楚的是:为什么这两个例子不同?

# Calling the String class directly, I can declare banana love!
irb(main):054:0> String.new
I <3 bananas
=> ""

# Using double quotes, this string is not as tasty :(
irb(main):055:0> ""
=> ""

这对研究来说很烦人,因为每个谷歌结果似乎都集中在基本的 Ruby 语法上,而我在 Ruby 文档中找不到任何东西。

4

1 回答 1

10

根据马茨

文字的字符串对象已经在编译时创建,这远在您重新定义初始化方法之前。文字中的单个字符串对象只是已分配和初始化对象的副本。顾名思义,initialize 方法的全部目的是初始化新创建的对象。我觉得没有必要为在编译时已经初始化的字符串文字调用(重新定义的)初始化方法。

于 2013-04-22T04:09:36.177 回答