如何将语句作为参数传递给方法中的块?

2sc*_*ish 2 ruby proc

我正在尝试弄清楚如何将语句作为方法参数传递 - 用作块过滤条件的一部分.例如,我有以下代码:

def method
  other_method.persons.each do |ped|

    next if ped.first_name.nil? or ped.last_name.nil?

    puts ped.id
    puts ped.full_name
  end
end
Run Code Online (Sandbox Code Playgroud)

我希望能够做的如下(因此我可能会更改方法中使用的过滤条件).是否可以从参数中传递包含块引用的语句?:

def method(statement)
  other_method.persons.each do |ped|

    next if statement

    puts ped.id
    puts ped.full_name
  end
end
Run Code Online (Sandbox Code Playgroud)

我很欣赏这方面的一些方向.

dbe*_*hur 6

您不传递传递块的"语句".传递的块通过yield或被捕获到proc中并被调用Proc#call.

def method
  other_method.persons.each do |ped|
    next if yield(ped)

    puts ped.id
    puts ped.full_name
  end
end

method { |ped| ped.first_name.nil? or ped.last_name.nil? }
Run Code Online (Sandbox Code Playgroud)