小编ben*_*nbs的帖子

如何使用method_missing动态声明方法?

我有一个ruby程序,我想接受用户的编写方法,并用该名称创建一个新方法.我试过这个:

def method_missing(meth,*args,&block)
  name = meth.to_s
  class << self
    define_method(name) do
      puts "hello " + name
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

`define_method': interning empty string (ArgumentError) in 'method_missing'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢.

编辑:

我让它以不同的方式工作,但我仍然很好奇如何以这种方式做到这一点.这是我的代码:

def method_missing(meth,*args,&block)
  Adder.class_eval do
    define_method(meth) do
      puts "hello " + meth
    end
  end
  send("#{meth}")
end
Run Code Online (Sandbox Code Playgroud)

ruby closures metaprogramming

5
推荐指数
1
解决办法
3727
查看次数

标签 统计

closures ×1

metaprogramming ×1

ruby ×1