我在這裏有一個Erlang代碼片段,我想將它用於更慣用的Erlang,而不是粗略的Python翻譯。Erlang語法幫助
過程需要一對全等列表並將它們組合在一起。一些元素需要根據其屬性從一個列表或另一個列表中取出,而其餘元素需要進行總結。它工作正常,但我覺得它不是慣用的...
Process = fun([RockA, FishA, TreeA, BarkA, DogA, CowA, MooA, MilkA, CheeseA, BreadA, WineA, GrapesA], [RockB, FishB, TreeB, BarkB, DogB, CowB, MooB, MilkB, CheeseB, BreadB, WineB, GrapesB]) ->
if
RockA /= [0,0,0] ->
NewRock = RockA,
NewFish = FishA,
NewTree = TreeA,
NewBark = BarkA,
NewDog = DogA;
true ->
NewRock = RockB,
NewFish = FishB,
NewTree = TreeB,
NewBark = BarkB,
NewDog = DogB
end,
if
CowA > CowB ->
NewCow = CowA;
true ->
NewCow = CowB
end,
NewMoo = MooA + MooB,
NewMilk = MilkA + MilkB,
NewCheese = CheeseA + CheeseB,
NewBread = BreadA + BreadB,
NewWine = WineA + WineB,
NewGrapes = GrapesA + GrapesB,
[NewRock, NewFish, NewTree, NewBark, NewDog, NewMoo, NewMilk, NewCheese, NewBread, NewWine, NewGrapes];
(_,_) ->
ok
end.
我不認爲將條款從case語句移動到函數是更習慣的。我只選擇了案例陳述,因爲它比這更「可讀」。 – Zed 2010-06-24 16:37:51
我不認爲'功能條款'的方法更習慣,我只是提出另一種選擇。我同意 - 在這種情況下,我認爲你的原件有點漂亮,儘管在大多數情況下,一個函數只包含一個case語句,但我通常會將其重構爲函數子句。這對我來說可能是一個例外,所以我給你+1。乾杯 – dsmith 2010-06-24 17:39:24