相关疑难解决方法(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中将块传递给另一个块?

假设我有以下过程:

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模板系统的基础.

ruby block

6
推荐指数
1
解决办法
3187
查看次数

使用 yield 声明 Ruby lambda

我正在编写一种方法,该方法将结构数组拆分为几个不同的数组,同时还消除了具有 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 给出我正在寻找的结果?

ruby lambda functional-programming

3
推荐指数
1
解决办法
1252
查看次数

标签 统计

ruby ×3

lambda ×2

block ×1

functional-programming ×1