为什么当我从课堂上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
我不明白。
答案 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的一些事情。