从全局范围调用实例方法时,为什么会出现NoMethodError?

时间:2017-09-18 04:02:09

标签: ruby

我一直在寻找答案,我可以看到很多类似的问题,但我仍然不明白我在做错了什么。我已经声明了一个Ruby类并尝试新建它然后在实例上调用一些实例方法,那么为什么我的start方法会得到NoM​​ethodError?

class MyClass

  def initialize
    self.class.reset
  end

  def self.reset
    ...
  end

  def self.start(port)
    ...
  end
end

test = MyClass.new
test.start '8082'  <- here <- undefined method `start' for #<MyClass:0x2f494b0> (NoMethodError)

你可以看到我是一个Ruby noob。任何帮助,将不胜感激。我可以改变我的班级结构,但我真的很想了解我在这里做错了什么。

2 个答案:

答案 0 :(得分:0)

此处start是一种类方法。

按照您当前的方法,您可以通过以下方式使用它

MyClass.start '8080'

但是,如果您想在instance的{​​{1}}上使用它,请使用以下代码

class

答案 1 :(得分:0)

您使用start作为Class变量,以self-keyword开头的方法名称将这些方法作为Class方法。所以如果你真的不想改变你的课程那么你应该这样称呼它:

  

MyClass.start&#39; 8080&#39;

否则,您可以从重置中删除self并启动方法并将其作为Instance方法并将其用作:

  

test = MyClass.new

     

test.start&#39; 8082&#39;