這是不太@ sethcall的回答是可讀的,但它應該是相當可讀,如果你知道一些紅寶石成語:
def get_let(response)
responses = [response.css('A'), response.css('B')]
responses.detect { |response| !response.empty? } || ''
end
detect
返回塊不返回false的第一個結果。這有避免條件的優點,如果這是你要做的事情。如果你想在上面的回答沒有||
做,你可以這樣做:
def get_let(response)
responses = [response.css('A'), response.css('B')]
responses.detect(-> { '' }) { |response| !response.empty? }
end
我沒有找到第二個解決方案是幾乎與第一個解決方案那樣直觀,但。如果你可以指定一個空字符串作爲參數,那將是非常棒的。然而,detect
及其別名find
的參數必須是nil
或響應call
方法的內容,例如lambda或proc。實際上沒有理由通過nil
,因爲這是默認值。
如果你知道爲確保response.css方法不會與它nil
或false
值返回一個數組,你可以嘗試這種解決方案:
見紅寶石文檔閱讀更多有關how detect
works 。這裏是docs on any?
。
你的問題是什麼? – sawa