【发布时间】:2020-08-23 10:55:33
【问题描述】:
module Country
def location
puts "location"
end
def self.included(base)
def cities
puts "cities"
end
end
def self.extended(base)
def animals
puts "animals"
end
end
end
class Test
include Country
end
class Test2
extend Country
end
据我了解,self.included 将在模块被包含为实例方法时被调用,而 self.extended 将在模块被扩展为静态类方法时被调用。
但是当我在同一个文件中有两个类时,为什么它没有抛出错误
Test.new.animals
=>动物
如果我删除了 Test 2 类,
# class Test2
# extend Country
# end
Test.new.animals
=>没有方法错误
【问题讨论】:
-
您可以使用
extended定义任意方法,但不能在该块中使用def。如果您需要动态执行此操作,您应该执行base.define_method(...)。
标签: ruby-on-rails ruby module class-method instance-methods