-1

我有如下代码(为了便于阅读而截断/解释)

def board_check?
  @board.each {|row| check_row_for_truth_conditions(row)}
end

def check_row_for_truth_conditions(row)
  return true if row.include("foo")
  false
end

现在,每个迭代器的隐式返回始终是它正在迭代的集合。IE; 我得到了数组,不是真假。如果我不重构并执行以下操作,它会按预期工作。但是我在很多地方都使用了 check_row_for_truth_conditions(而且它更长),所以想重构它

def board_check?
  @board.each do |row| 
    return true if row.include("foo")
    false
  end
end
4

2 回答 2

3

传递给每个 ( ) 的块的返回值false被丢弃。显式返回有效,因为它从方法返回,而不是从块返回。你反而想要:

def board_check?
  @board.each do |row| 
    return true if row.include("foo")
  end
  return false
end

但你真的想使用any?

def board_check?
  @board.any? do |row| 
    row.include("foo")  # or perhaps check_row_for_truth_conditions(row)
  end
end

此外,您的 check_row_for_truth_conditions 可以简化为:

def check_row_for_truth_conditions(row)
  row.include("foo")
end

不需要显式返回true/ false

于 2013-10-31T01:43:36.287 回答
3

一种选择是:

def board_check?
  @board.any? {|row| row.include("foo") }
end
于 2013-10-31T01:44:43.203 回答