2013-10-31 67 views
-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 

眼下的每一個迭代器始終是它遍歷集合隱含返回代碼。即;我得到數組,不是真或假。如果我不重構並執行如下操作,它將按預期工作。不過我用的是check_row_for_truth_conditions在很多地方(這是更長的時間),所以想重構出來

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

我想通了。使用任何我可以得到我想要的?而不是每個。所以'@ board.any? {|行| check_row_for_truth_conditions(row)}' – user2892536

回答

2

傳遞給每個(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

+0

謝謝!想出我應該使用任何正確的,因爲你正在打字:)我會盡快接受 – user2892536

2

一種選擇是:

def board_check? 
    @board.any? {|row| row.include("foo") } 
end