传递一种方法 - 在读取时 - 相当于返回true

时间:2014-02-03 22:50:35

标签: ruby

我有一个接受方法作为参数的方法:

def acceptor_method(received_method)
  an_arry.each do |attr|
    received_method if some_condition
  end
end

如果所有received_method所做的都是通过某些代码运行的话,那么这很有效:

def some_method
  do_something
end

相当于:

def acceptor_method(received_method)
  an_arry.each do |attr|
    do_something if some_condition
  end
end

但是,如果我希望received_method打破循环并返回一个值,如下所示:

def acceptor_method(received_method)
  an_arry.each do |attr|
    return true if some_condition
  end
end

不幸的是,这不起作用:

def some_method
  return true
end

因为它仅对some method返回true,而不是acceptor_method - 它继续在循环中播放。

那么有没有办法发送一个方法,当运行时相当于return true

2 个答案:

答案 0 :(得分:2)

您可以使用块而不是方法来执行此操作。见How can I return something early from a block?

基本上,如果你有一个break valueyield的阻止,该函数将返回value。不幸的是我没有看到使用方法的方法,因为Ruby真的不喜欢在块或循环之外使用break

答案 1 :(得分:2)

def acceptor_method
  [1, 2, 3, 4].each do |attr|
    ret = yield attr
    puts attr
  end
end

test = acceptor_method do |attr|
  break 'test' if attr == 3
end

puts test

输出:

1
2
test