我想在Elixir中编码这个算法:
var name = generate_name();
while (check_if_exists(name)) {
name = generate_name();
}
我无法在Elixir中以相同的方式编码,因为必须有更多的惯用和功能方式。那怎么办呢?
答案 0 :(得分:7)
Elixir是Immutable programming language。这意味着您无法修改变量的值,只能重新绑定它。因此,Elixir中不存在经典 while-loop。
但是,您可以implement this using recursion:
def get_name do
name = generate_name()
case check_if_exists(name) do
true -> get_name()
false -> name
end
end
答案 1 :(得分:6)
另一种可能性是创建无限的名称流,然后找到可用的第一个名称:
Stream.repeatedly(&generate_name/0)
|> Enum.find(&check_if_exists/1)