通过将值重新赋值给变量

时间:2017-04-11 03:49:16

标签: loops while-loop elixir

我想在Elixir中编码这个算法:

var name = generate_name();
while (check_if_exists(name)) {
  name = generate_name();
}

我无法在Elixir中以相同的方式编码,因为必须有更多的惯用和功能方式。那怎么办呢?

2 个答案:

答案 0 :(得分:7)

Elixir是Immutable programming language。这意味着您无法修改变量的值,只能重新绑定它。因此,Elixir中不存在经典

但是,您可以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)