Pet*_*ter 3 ruby metaprogramming
我想return_empty_set在Ruby中有一个类方法,类似于attr_reader方法.我建议的实施是
class Class
def return_empty_set *list
list.each do |x|
class_eval "def #{x}; Set.new; end"
end
end
end
Run Code Online (Sandbox Code Playgroud)
和示例用法:
class Foo
return_empty_set :one
end
Foo.new.one # returns #<Set: {}>
Run Code Online (Sandbox Code Playgroud)
但是使用一个字符串似乎是一个非常黑客.是否有更清洁或更好的方式来写这个,也许避免class_eval?或者这是最好的方式吗?
用途define_method:
class Module
def return_empty_set *names
names.each do |name|
define_method(name){Set.new}
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
655 次 |
| 最近记录: |