相关疑难解决方法(0)

Ruby:块中的yield块?

是否有可能为一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 lambda

10
推荐指数
2
解决办法
3838
查看次数

扩展模块中的类方法

我正在玩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)

三个问题:

  1. 有没有办法在不重命名方法的情况下这样做,以便允许使用super?还是更清洁/更短的东西?

  2. 有没有一种干净的方法来设置默认值?

  3. 有没有办法wrap :bar进一步推动通话?

ruby metaprogramming

7
推荐指数
1
解决办法
4397
查看次数

标签 统计

ruby ×2

lambda ×1

metaprogramming ×1