我正在尝试弄清楚如何将语句作为方法参数传递 - 用作块过滤条件的一部分.例如,我有以下代码:
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)
我很欣赏这方面的一些方向.
您不传递传递块的"语句".传递的块通过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)