是否有可能为一lambda,proc,method或其他类型的宝石块,以获得到另一个块?
就像是...
a = lambda {
puts 'in a'
yield if block_given?
}
a.call { puts "in a's block" }
Run Code Online (Sandbox Code Playgroud)
这不起作用......它只是产生
in a
=> nil
Run Code Online (Sandbox Code Playgroud)
有没有办法让块调用一个块?
我正在玩ruby的元编程功能,我发现它有点毛茸茸.我正在尝试使用模块包装方法调用.目前,我这样做:
module Bar
module ClassMethods
def wrap(method)
class_eval do
old_method = "wrapped_#{method}".to_sym
unless respond_to? old_method
alias_method old_method, method
define_method method do |*args|
send old_method, *args
end
end
end
end
end
def self.included(base)
base.extend ClassMethods
end
end
class Foo
include Bar
def bar(arg = 'foo')
puts arg
end
wrap :bar
end
Run Code Online (Sandbox Code Playgroud)
三个问题:
有没有办法在不重命名方法的情况下这样做,以便允许使用super?还是更清洁/更短的东西?
有没有一种干净的方法来设置默认值?
有没有办法wrap :bar进一步推动通话?