0

为什么给出这样的模块:

module TestModule
  module Configuration
    # Return the configuration values set in this module
    def options
      puts "OPTIONS IS IN"
      puts self.inspect
    end
  end
end

我知道 options 方法在 TestModule 中而不是在 Configuration 中?

编辑:我添加了我正在查看的宝石,以及让我感到困惑的宝石:

检查此文件:第 37 行的configuration.rb options 定义了该方法。

然而,在Client类中,当调用选项(第 11 行)时,使用了 Awesome 而不是 Configuration。这是为什么?我没有看到任何名为 Awesome 的类混合了这些模块。

4

2 回答 2

0

有问题的宝石确实(在 awesome.rb 中)

module Awesome
  extend Configuration
end

因此Awesome::Configuration(例如options)上的所有方法都成为Awesome模块上的单例方法

于 2012-08-11T23:57:22.390 回答
0

从技术上讲,它不是两者的一部分。它必须混合到一个类中才能使其成为一个类的一部分。要使其可直接在模块上调用,您需要self.在定义中为其添加前缀以使其成为模块方法而不是实例方法:

def self.options
  self #=> TestModule::Configuration
end

这是一个很好的 mixins 教程,它允许您使用实例方法:http ://rubylearning.com/satishtalim/modules_mixins.html

于 2012-08-11T23:14:47.933 回答