我在这里有一个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