Ruby中Module中Module的自我价值

时间:2012-08-11 22:54:46

标签: ruby module

为什么给出这样的模块:

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的类,这些模块正在混合。

2 个答案:

答案 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模块上的单例方法