我如何在initialize方法中要求并包含一个模块

时间:2013-09-04 17:12:38

标签: ruby oop

我试图动态要求然后在初​​始化方法中包含模块。

# file: object.rb

class Object

  attr_accessor :array

  def initialize array
    @array = array
    @array.each do |f|
      require_relative "#{f}"
      include f.capitalize # the method name is the same as the filename
      puts @variable # property from included method
    end
  end
end

object = Object.new ['a','b','c']

使用这些模块文件

# file: a.rb

module A
  @variable = 'string A'
end

以及b和c等等

我一直收到错误:

`block in initialize': undefined method `include'

我在这里做错了什么,是否有更好的方法来实现我想做的事情?

2 个答案:

答案 0 :(得分:2)

你无法在include中调用initialize的原因是include是一种方法,它只在类和模块上定义,但在像{一样的实例方法内部{1}}隐式接收器是类的对象,而不是类本身。

由于您只需要在新创建的对象上使用这些方法,因此您只需使用initialize而不是extendinclude类似于extend的每对象版本,因为它将给定模块的方法作为单例方法添加到对象中,而不是将它们作为实例方法添加到模块或类中。

答案 1 :(得分:1)

require_relative "#{f}"

注意引号。 '#{f}'未插入。