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

我想在Ruby中有一个
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

太好了,谢谢。你是对的,它应该在
模块下
,因为这样我就可以
包含
这个功能。不确定你的意思是不是这样,但是把它放在
模块下的原因是,你可以在
模块定义(稍后包含)以及
中使用它。