我對find
語句有問題。我有一組stuff
。我搜索了一個特定的項目,但沒有找到它。如何調試以瞭解find
聲明中的條件失敗?查找語句中的調試邏輯
array.find {|x| (x.a == ::stuff::stuffiesA || x.a == ::stuff::stuffiesB) &&
x.b == thing &&
x.c == ::stuff::thingies}
我對find
語句有問題。我有一組stuff
。我搜索了一個特定的項目,但沒有找到它。如何調試以瞭解find
聲明中的條件失敗?查找語句中的調試邏輯
array.find {|x| (x.a == ::stuff::stuffiesA || x.a == ::stuff::stuffiesB) &&
x.b == thing &&
x.c == ::stuff::thingies}
這將是太多的意見,所以重新發布:
我一般提取語句變量和步。大多數IDE都具有可變抽取的快捷方式。從RubyMine的一個是Ctrl+Alt+V
提取後,它看起來是這樣的:
array.find {|x|
xa_eq_stuffies_a = (x.a == ::stuff::stuffiesA)
xa_eq_stuffies_b = (x.a == ::stuff::stuffiesB)
xb_eq_thing = (x.b == thing)
xc_eq_thingies = (x.c == thing)
(xa_eq_stuffies_a || xa_eq_stuffies_b) &&
xb_eq_thing && xc_eq_thingies
}
然後就可以正常調試。
您還可以使用tap()方法(需要紅寶石> = 1.9)保存代碼結構,但如果您使用的是IDE使用監視窗口來我反正是重構列車殘骸:)
得到每個表達式的結果。例如。將x.a == ::stuff::stuffiesA
作爲觀察窗口中的表達式,然後設置一個斷點。
,或者你可以改變輕微源,使你更容易
array.find {|x|
a = x.a == ::stuff::stuffiesA
b = x.a == ::stuff::stuffiesB
c = x.b == thing
d = x.c == ::stuff::thingies
(a || b) &&
c &&
d}
當然
,你應該爲變量,不僅將幫助您調試也使代碼更容易理解
使用合適的名稱
將變量提取到變量中,將它們結合在最後一行,並通過 – kostja
步驟聽起來似乎是一個好主意!我在哪裏可以學習如何做到這一點? – Maidenone
我前面說過,我是ruby的新手,在搜索「ruby find」時很難在google上找到任何內容,甚至很難用combinde邏輯找到任何內容。 PLZ激勵你的讚賞! – Maidenone