Ruby 定义名为'的实例方法是否有效/可接受;新';用红宝石?

Ruby 定义名为'的实例方法是否有效/可接受;新';用红宝石?,ruby,Ruby,当我在irb中执行以下操作时,我得到以下输出: >> class TestMe >> def new >> puts 'hi!' >> end >> end => nil >> TestMe.new.new hi! 此外: >> class TestMe >> end => nil >> TestMe.new.new NoMethodError: undefi

当我在irb中执行以下操作时,我得到以下输出:

>> class TestMe
>>   def new
>>     puts 'hi!'
>>   end
>> end
=> nil
>> TestMe.new.new
hi!
此外:

>> class TestMe
>> end
=> nil
>> TestMe.new.new
NoMethodError: undefined method `new' for #<TestMe:0x00000101038750>

请注意,
locations
此处返回一个delegator类,该类执行一些繁重的操作(通过此
new
方法),并最终返回一个
位置。带有一些基本设置数据的new
实例已准备就绪,但类对象本身并未调用
new
。这是一个可接受的方法名用法,还是我会遇到问题?

的第一次调用。new
将调用构造函数,并返回类的实例。对
.new
的第二次调用将调用该对象上的实例方法。定义一个
新的
实例方法是完全可以接受的

为了干扰构造函数,您必须定义一个名为
new
的类级方法。该方法可以调用
super#new
(调用
Class#new
)来执行对象的实际创建:

class Test
  def self.new
    puts "hi!"
    super
  end
end


x = Test.new # outputs "hi"

在实例和类级别覆盖
new
是完全有效的,只要您定义自定义
new
方法来做一些合理的事情。

第一次调用
。new
将调用构造函数,并返回类的实例。对
.new
的第二次调用将调用该对象上的实例方法。定义一个
新的
实例方法是完全可以接受的

为了干扰构造函数,您必须定义一个名为
new
的类级方法。该方法可以调用
super#new
(调用
Class#new
)来执行对象的实际创建:

class Test
  def self.new
    puts "hi!"
    super
  end
end


x = Test.new # outputs "hi"

在实例和类级别上覆盖
new
是完全有效的,只要您定义自定义
new
方法来做一些合理的事情。

这是ruby提供的强大功能,但是这是不可取的,除非它是必需的伟大答案。(我从来不敢在生产代码中这样做…)这是ruby提供的强大功能,但这是不可取的,除非它是必需的伟大答案。(我从来不敢在生产代码中这样做…)这是可能的,但肯定会在代码评审中引起一些讨论。在我看来,在Ruby中重用“new”是个坏主意,因为它是一个根深蒂固的方法名。Ruby程序员对它的含义有一个期望,当需要使用它时,他们会寻找
initialize
方法。这是可能的,但肯定会在代码评审中引起一些讨论。在我看来,在Ruby中重用“new”是个坏主意,因为它是一个根深蒂固的方法名。Ruby程序员对它的含义有一个期望,当需要使用它时,他们会寻找
initialize
方法。