【问题标题】:While Loop in Elixir by re-assigning a value to a variable通过将值重新分配给变量来在 Elixir 中循环
【发布时间】:2017-09-06 06:43:31
【问题描述】:

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

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

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

【问题讨论】:

标签: loops while-loop elixir


【解决方案1】:

Elixir 是 Immutable programming language。这意味着您不能修改变量的值,只能重新绑定它。因此,classic 在 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

【讨论】:

  • 指南建议仅对 3 个以上的子句使用 caseif check_if_exists(name), do: get_name(), else: name
  • 我可以很好地改变 Elixir 中变量的值
  • 不,您不能更改变量的值 - 您只能将其重新绑定到不同的值。
  • If/else 只是上面带有真/假代码的 case 语句的宏。
  • 我选择了case 而不是if-else,因为我更喜欢它,即使它是case 之上的一个宏,就像@FredtheMagicWonderDog 所说的那样
【解决方案2】:

另一种可能性是创建无限的名称流,然后找到可用的第一个名称:

Stream.repeatedly(&generate_name/0)
|> Enum.find(&check_if_exists/1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多