为什么可以自我方法'不要在同一个类中使用方法?

时间:2018-03-23 09:54:02

标签: ruby-on-rails ruby

为什么当我从课堂上self.method时,我会得到undefined method `my_method' for MyModule::MyOtherModule::MyClass:Class

module MyModule
 module OtherModule
  class MyClass < Base

   def my_method
   end

   def self.my_self_method
    my_method
   end

  end
 end
end

我使用my_self_method来自一个名为[sic]的班级致电send

class Base
 class << self
  my_method(method_name)
   send("my_self_#{method_name}")
  end
 end
end

我不明白。

1 个答案:

答案 0 :(得分:2)

在您的代码中,您定义了一个实例方法(my_method)和一个类方法(my_self_method)。

这意味着您可以致电:

MyClass.my_self_method

MyClass.new.my_method

如果您希望从my_method调用my_self_method,则可以将其定义为:

def self.my_method
  ...
end

然后可以使用以下内容:

def self.my_self_method
  my_method
end

这是另一种选择。有一条评论表明在类方法中调用new.my_method是不好的做法,但是我已经看到了一种适用于此类型的模式,我发现它非常惯用,例如:< / p>

class MyClass
  def self.run(the_variables)
    new(the_variables).process
  end

  def initialize(the_variables)
    # setup the_variables
  end

  def process
    # do whatever's needed
  end
end

这允许简单的入口点MyClass.run(the_variables)。如果您的用例看起来合适,那么类似的模式将是:

module MyModule
  module OtherModule
    class MyClass < Base

      def my_method
      end

      def self.my_self_method
        new.my_method
      end
    end
  end
end

我确定有不同意这种模式的范围,并且有兴趣听听其他人的观点&#39;意见中的意见。

希望这有助于澄清@ N.Safi的一些事情。