我在网址In Ruby or Rails, why is "include" sometimes inside the class and sometimes outside the class?读到了这个问题。根据这个问题的答案,我希望类print2
的方法Calculation
应该可以被Addition
和ABc
访问。但是我收到错误{{{ 1}} print2'for Addition:Class(NoMethodError)`
undefined method
请解释为什么会出现这个错误?
由于
答案 0 :(得分:2)
extend
的接收者应该是每个类,因此您需要Addition.extend Calculation
和Abc.extend Calculation
(在类定义之后)。分号不是必需的。
module D
def dog
puts "woof"
end
end
class A; end
A.extend D
A.dog #=> "woof"
class B; end
B.extend D
B.dog #=> "woof"
答案 1 :(得分:1)
我的预感是你的extend
(在任何一类之外)扩展了主要的本征类。主要是您当前运行时环境的Object实例。 Eigenclass是一个对象的类,其唯一的实例是给定的对象。 Ruby中的每个对象都有一个Eigenclass。没有什么继承自Eigenclass。因此,extend
不会继承到任何其他类。