ruby - Ruby 中的猴子修补和重载方法

标签 ruby metaprogramming overloading

我想扩展 Proc 类,以便它的构造函数也可以采用参数散列,并将转换为具有某些元编程构造的方法。效果如下:

p = Proc.new(this: 100, that: 200, yes: 1, no: 2) { |arg| arg.even? }
p.call(1) # => false
p.this # => 100
p.yes # => 1

我想知道用 ruby​​ 的方式做这样的事情。

最佳答案

class Proc
  def initialize h; @h = h end
  def method_missing k; @h[k] end
  def respond_to_missing?; true end
end

p = Proc.new(this: 100, that: 200, yes: 1, no: 2) { |arg| arg.even? }
p.call(1) # => false
p.this # => 100
p.yes # => 1

关于ruby - Ruby 中的猴子修补和重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13769620/

相关文章:

ruby-on-rails - 如何在基本字符串签名 OAuth1 中包含查询参数

ruby-on-rails - 如何向 *args 添加散列?

python - 更改 Python 中的函数实现

java - 打印列表的重载方法

java - 子类中的重载不起作用

Ruby 系统调用获取有关命令失败的信息

ruby-on-rails - Ubuntu 11.10 RVM 安装错误

对于 envir 参数是 list 或 pairlist 的情况,R eval 具有误导性文档

ruby const_missing 方法之谜

c++ - 函数/方法重载 C++ : Data type confusion?