【发布时间】:2012-07-27 10:05:59
【问题描述】:
我想写一个简单的基于所有方法的回调函数,只是多加一个单词'hello'。我刚刚学习了“别名”,所以这个功能是我想尝试的。代码如下:
a = []
class << a
Array.instance_methods(false).each do |meth|
alias_method :old_meth, meth
define_method(meth) do |*args, &block|
old_meth *args, &block
puts "hello"
end
end
end
a.push "good"
在运行代码时,我收到以下错误:
DRBServer.rb:6:in `pack': too few arguments (ArgumentError)
然后我认为是因为'pack'函数,所以我过滤'pack'函数如下:
Array.instance_methods(false).each do |meth|
if meth != :pack
....
end
然后它抱怨另一个函数'drop_while'......
DRBServer.rb:7:in `drop_while': wrong number of arguments(1 for 0) (ArgumentError)
我知道问题一定是传递参数的方式(*args,&block),但是如果我只是使用这种方式将参数传递给一个方法,那么它就可以正常工作。如下:
a = []
class << a
alias_method :old_push, :push
define_method("push") do |*args, &block|
old_push *args, &block
puts "hello"
end
end
a.push "good" => [output "hello"]
我真的很困惑,感谢您的帮助。谢谢。
【问题讨论】:
标签: ruby methods callback alias