对Ruby的安静新我找不出什么东西。 下面是一个示例代码Ruby尝试以编程方式避免子类中的多重定义
class Big
def self.metaclass; class << self; self; end; end
def self.convertor b
metaclass.instance_eval do
define_method(:convert) do |val|
return b val
end
end
end
end
class Small < Big
convertor { |v| v.to_i + 1 }
end
puts Small.convert('18')
目的是有很多子类来大的,我喜欢以避免在每个
def convert(val)
return conversion_specific_to_subclass(val)
end
定义做前一种方法,我只是为每个一行子类。但不能让它工作。 我在做什么错了?有没有更好的方法来实现我所希望的?
在此先感谢
编辑:问这里是错误的代码产生(红宝石2.1.0)
test2.rb:4:in `convertor': wrong number of arguments (0 for 1) (ArgumentError)
from test2.rb:14:in `<class:Small>'`
你是什么意思“不起作用”?有错误吗?其他输出?请更具体一些。 – Linuxios
使用amperstamp(b&)我然后有:test2.rb:14:'':未定义的方法'转换器'为Small:Class(NoMethodError)希望它会帮助;) –
zedryas