我试图动态要求然后在初始化方法中包含模块。
# 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'
我在这里做错了什么,是否有更好的方法来实现我想做的事情?
答案 0 :(得分:2)
你无法在include
中调用initialize
的原因是include
是一种方法,它只在类和模块上定义,但在像{一样的实例方法内部{1}}隐式接收器是类的对象,而不是类本身。
由于您只需要在新创建的对象上使用这些方法,因此您只需使用initialize
而不是extend
。 include
类似于extend
的每对象版本,因为它将给定模块的方法作为单例方法添加到对象中,而不是将它们作为实例方法添加到模块或类中。
答案 1 :(得分:1)
require_relative "#{f}"
注意引号。 '#{f}'
未插入。