为什么给出这样的模块:
module TestModule
module Configuration
# Return the configuration values set in this module
def options
puts "OPTIONS IS IN"
puts self.inspect
end
end
end
我得到的选项方法是在TestModule而不是在Configuration?
编辑:我添加了我要看的宝石,以及给我这种混乱的宝石:
检查此文件:第37行configuration.rb,定义方法 options
。
在类Client中,当调用选项(第11行)时,使用Awesome而不是Configuration。这是为什么?我没有看到任何名为Awesome的类,这些模块正在混合。
答案 0 :(得分:0)
从技术上讲,它不是其中之一。它必须混合到一个类中才能使它成为一个类的一部分。要使它可以直接在模块上调用,您需要在定义中使用self.
作为前缀,以使其成为模块方法而不是实例方法:
def self.options
self #=> TestModule::Configuration
end
这是一个关于mixins的好教程,允许你使用实例方法:http://rubylearning.com/satishtalim/modules_mixins.html
答案 1 :(得分:0)
有问题的宝石(在awesome.rb中)
module Awesome
extend Configuration
end
因此Awesome::Configuration
上的所有方法(例如options
)都成为Awesome
模块上的单例方法