2012-11-01 44 views
0

不知道,我的問題是正確的,但一般我會做到以下幾點:產卵數組

給定一個代碼片斷,如:

[{ <some events>, "close"}, { <some other events>, "close"}].each do |events| 
    it "should handle events" do 
     ... 
    end 
    ... 
end 

我想擴大本次活動的陣列。假設有2種方式可以使用關閉"close"(相同)和"stop"。這意味着,我想編寫一些代碼來檢查4個序列:[{<some events>, "close"}, {<some other events>, "close"}, {<some events>, "stop"}, {<some other events>, "stop"}]

什麼是適當的(Ruby風格)如何編寫代碼?

更新<some events><some other events>是字符串序列(這只是爲了澄清)。

更新N2:stop,並在更一般的情況下close可以出現在序列的中間爲好。

更新N3:它只是可能是在do具有單個最終序列將更加方便。我可能在這裏錯了。

更新N4:例(只是爲了讓這一切清楚):

最初的消息: 「開放」, 「click_btn1」, 「click_btn2」, 「開放」, 「click_btn2」,「 click_btn3" ,

期望的結果: 「開放式」, 「click_btn1」, 「click_btn2」, 「關閉」, 「打開」, 「click_btn1」, 「click_btn2」, 「關閉」, 「打開」, 「click_btn2」, 「click_btn3」,「stop」,「open」,「click_btn2」,「click_btn3」,「stop」

+2

這些都不是有效的Ruby對象。 – sawa

+0

「它」應該處理事件「'應該是某種單元測試? –

+0

@AndrewGrimm:是的,絕對是 – BreakPhreak

回答

2

只需要嵌套迭代。

[some_events, some_other_events].each do |event| 
    ["close", "stop"].each do |close_or_stop| 
    ... 
    end 
end 

或許

[some_events, some_other_events].product(
["close", "stop"]) do |event, close_or_stop| 
    ... 
end 
+0

這太好了!然而,「關閉」,「停止」並不一定會成爲結束語(在我的更一般的情況下)。另外,我想在'do'上有一個最後的數組。請問可以嗎? – BreakPhreak

+0

您可以通過在產品後執行to_a來創建數組,但您通常希望避免創建額外的數組,因爲這是額外的計算。 – sawa

+0

這可能是對問題目標的一些誤解 - 只是用一個明確的例子添加**更新N4 **。你能看看嗎? – BreakPhreak