Ruby元编程中避免类求值
我想在Ruby中有一个Ruby元编程中避免类求值,ruby,metaprogramming,Ruby,Metaprogramming,我想在Ruby中有一个return\u empty\u setclass方法,类似于attr\u reader方法。我提议的实施是 class Class def return_empty_set *list list.each do |x| class_eval "def #{x}; Set.new; end" end end end 用法和示例: class Foo return_empty_set :one end Foo.new.one # r
return\u empty\u set
class方法,类似于attr\u reader
方法。我提议的实施是
class Class
def return_empty_set *list
list.each do |x|
class_eval "def #{x}; Set.new; end"
end
end
end
用法和示例:
class Foo
return_empty_set :one
end
Foo.new.one # returns #<Set: {}>
class-Foo
返回\u空\u集:一个
结束
Foo.new.one返回#
但诉诸于一根绳子似乎是一个相当棘手的问题。是否有一种更干净或更好的方法来编写此文档,或许可以避免
class\u eval
?或者这是最好的方法吗?使用定义方法
:
class Module
def return_empty_set *names
names.each do |name|
define_method(name){Set.new}
end
end
end
太好了,谢谢。你是对的,它应该在
模块下
,因为这样我就可以包含
这个功能。不确定你的意思是不是这样,但是把它放在模块下的原因是,你可以在模块定义(稍后包含)以及类
中使用它。