Ruby性能:使用define_method或eval定义方法

Bog*_*iev 7 ruby methods eval metaprogramming

在查看ActiveSupport源代码时,我注意到有时eval会在define_method足够的地方使用.

示例:ActiveSupport:Module.delegate

我认为define_method更干净,更安全的做事方式.是什么带来的好处evaldefine_method?性能,内存使用,还有其他什么?

And*_*imm 3

当您使用define_method时,您定义的方法不能接受块

\n\n
\n

众所周知,由于 Ruby 1.8 中块参数的缺陷,Class#define_method 无法定义采用块的方法。

\n
\n\n
def x *args, █ end  # => works!\ndefine_method(:x) {|*args,&block| } # => SyntaxError: compile error\n
Run Code Online (Sandbox Code Playgroud)\n\n

定义的方法需要一个块:

\n\n
"def #{prefix}#{method}(*args, &block)" # def customer_name(*args, &block)\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以不能使用define_method。

\n