我想写一个基于所有方法的简单回调函数,只需多加一个单词'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"]
我真的很困惑,感谢您的帮助。谢谢。