Ruby方法可见性:未定义的方法?

时间:2012-09-14 10:34:32

标签: ruby methods visibility nomethoderror

我还是红宝石的新手。我不明白方法的可见性。文档说,默认情况下所有方法都是公共的(除非另有定义)。所以这应该工作(但它没有,MWE):

modules/example.rb

class Example

  def do_stuff
    puts 'hello world'
  end

end

testing.rb

load 'modules/example.rb'

Example.new
Example.do_stuff

致电$ ruby testing.rb 结果

testing.rb:9:in `<main>': undefined method `do_stuff' for Example:Class (NoMethodError)

有人可以解释原因吗?以及如何修复它我可以直接调用do_stuff

1 个答案:

答案 0 :(得分:2)

您正在定义一个实例方法,需要在Example类的实例上调用它:

ex_instance = Example.new
ex_instance.do_stuff

如果要直接调用它,则需要将其定义为类方法:

class Example

  def self.do_stuff
    puts 'hello world'
  end

end

然后你可以这样调用它,而不需要调用Example.new

Example.do_stuff