【发布时间】:2014-03-22 05:41:59
【问题描述】:
对 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')
目的是为 Big 提供很多子类,我希望避免在每个子类中定义
def convert(val)
return conversion_specific_to_subclass(val)
end
按照前一种方式,每个子类只有一行。但不能让它工作。 我做错了什么?有没有更好的方法来实现我的愿望?
提前致谢
编辑:这里问的是这段代码产生的错误(使用 ruby 2.1.0)
test2.rb:4:in `convertor': wrong number of arguments (0 for 1) (ArgumentError)
from test2.rb:14:in `<class:Small>'`
【问题讨论】:
-
“不起作用”是什么意思?有错误吗?其他输出?请更具体。
-
使用ampstamp (b&) 然后我有:test2.rb:14:in
<class:Small>': undefined methodconvertor' for Small:Class (NoMethodError) 希望它会有所帮助;)