我一直在尝试建立一个系统,借此我可以生成一系列类似的 Ruby 类,这些类由一个整数参数区分,我将其保存到相关类的类变量中——类似于 C++ 模板。
但是,引用(因此,创建)模板类的新版本会覆盖以前版本中保存的参数,我不知道为什么。
这是一个最小的例子
class Object
def self.const_missing(name)
if name =~ /^Templ(\d+)$/
return make_templ $1.to_i
else
raise NameError.new("uninitialised constant #{name}")
end
end
private
def make_templ(base)
# Make sure we don't define twice
if Object.const_defined? "Templ#{base}"
return Object.const_get "Templ#{base}"
else
# Define a stub class
Object.class_eval "class Templ#{base}; end"
# Open the class and define the actual things we need.
Object.const_get("Templ#{base}").class_exec(base) do |in_base|
@@base = in_base
def initialize
puts "Inited with base == #{@@base}"
end
end
Object.const_get("Templ#{base}")
end
end
end
irb(main):002:0> Templ1.new
Inited with base == 1
=> #<Templ1:0x26c11c8>
irb(main):003:0> Templ2.new
Inited with base == 2
=> #<Templ2:0x20a8370>
irb(main):004:0> Templ1.new
Inited with base == 2
=> #<Templ1:0x261d908>
我是否在我的 Ruby 中发现了一个错误(ruby 1.9.2p290 (2011-07-09) [i386-mingw32]),还是我只是编码错误?