4 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
Elixirif也有變量和表達(dá)式,因此您真正需要做的就是while True用遞歸調(diào)用替換:
def something() do
x = function()
y = function()
if x != y do
x
else
something()
end
end

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
遞歸是你的朋友
def something do
x = function()
y = function()
if x != y, do: x, else: something()
end

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
為了多樣性,這里不是基于Stream.iterate/2
和 的遞歸答案Stream.take_while/2
。請(qǐng)注意,可以使用任何無限流生成器來代替iterate/2
,例如Stream.cycle/1
。
0
|> Stream.iterate(&(&1 + 1))
|> Stream.map(fn _ -> {f1(), f2()} end)
|> Stream.take_while(fn {x, y} -> x != y end)
|> Enum.to_list()
在許多情況下,這種解決方案更為可靠。

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
我認(rèn)為你的解決方案還不錯(cuò),只是習(xí)慣于看到多個(gè)函數(shù)子句在起作用。您可以稍微重新排列它以使其更具可讀性,但這只是個(gè)人喜好。
def something(), do: something(nil, nil) defp something(x, x), do: something(function(), function()) defp something(x, _y), do: x
(x, x)
當(dāng)參數(shù)相等時(shí),該子句將被執(zhí)行。
該(x, _y)
子句僅返回x
,否則將執(zhí)行。
但我不得不承認(rèn),波蒂巴斯的答案非常簡單,而且可能是一個(gè)很好的妥協(xié)。我認(rèn)為我一般更喜歡函數(shù)子句方式,因?yàn)樗箙?shù)明確并隱藏更少的副作用。
添加回答
舉報(bào)