一直在學習Elixir,我對單線if/else的不同方式有點好奇。爲什麼在Elixir中使用do/else關鍵字?
我開始與...
if left_side_wins?(p, c) do
{"Humanity", p, c}
else
{"The Machine", c, p}
end
|> print_winner
...這管道的元組正確的或者贏家。但是這不...
if left_side_wins?(p, c), do: {"Humanity", p, c}, else: {"The Machine", c, p}
|> print_winner
...我知道這是因爲|>
被認爲是else
的一部分,我可以用括號解決它......
if(left_side_wins?(p, c), do: {"Humanity", p, c}, else: {"The Machine", c, p})
|> print_winner
...現在這個工作。對於任何一個獲勝者,該元組都正確地傳送至print_winner
。
但我可以也使用內聯做/其它/結束塊,做...
if left_side_wins?(p, c) do {"Humanity", p, c} else {"The Machine", c, p} end
|> print_winner
...它的工作原理也是如此。
我讀過的每一個資源都描述了使用do:.., else:..
格式,但do ... else ... end
似乎既清晰又不易出錯。
他們之間的主要區別是什麼,除了我所看到的?
do: ..., else: ...
似乎是首選,但它不是更加敏感的運營商優先?
大討論,謝謝!是否有任何選擇比其他選擇更皺眉?還是他們通常都被接受爲「Elixirish」並用於不同的情況?無論如何,「...總是開始具有原始價值的管道鏈......」和「......如果表達成自己的功能」是**很棒的建議。 – kevlarr
他們都是Elixirish。我看到有人爭辯說,如果只有一個表達式在做,而不是它應該使用',do:else:'並且在有多個表達式的情況下離開'do else end'。但是,即使在單一表達式的情況下,我也只是檢查看起來更好看。如果一行中的所有內容少於80個字符,我使用',do:else:'否則'do else end'。查看Credo linter https://github.com/rrrene/credo它檢查你的代碼是否有這樣的東西:)這是一個很酷的學習工具! – tkowal