是否有可能为一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)
有没有办法让块调用一个块?
假设我有以下过程:
a = Proc.new do
puts "start"
yield
puts "end"
end
Run Code Online (Sandbox Code Playgroud)
另外假设我传递a给另一个方法,该方法随后调用instance_eval另一个具有该块的类,我现在如何将一个块传递到该方法的结尾处a.
例如:
def do_something(a,&b)
AnotherClass.instance_eval(&a) # how can I pass b to a here?
end
a = Proc.new do
puts "start"
yield
puts "end"
end
do_something(a) do
puts "this block is b!"
end
Run Code Online (Sandbox Code Playgroud)
输出当然应该是:
start
this block is b!
end
Run Code Online (Sandbox Code Playgroud)
如何将辅助块传递给instance_eval?
我需要这样的东西作为我正在研究的Ruby模板系统的基础.
我正在编写一种方法,该方法将结构数组拆分为几个不同的数组,同时还消除了具有 nil 值的元素。
我想写的是:
def my_func(some_data)
f = lambda{|data| data.select{|m| yield(m).present? }.map { |m| [m.date, yield(m)]}}
x = f.call(some_data) {|m| m.first_var}
y = f.call(some_data) {|m| m.second_var}
return x, y
end
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,因为 Ruby 没有以我期望的方式处理 lambda 内部的产量。
LocalJumpError:没有给出块(产量)
有没有办法定义 f 以便 x 和 y 给出我正在寻找的结果?