Loops 而在Elixir中通过给变量重新赋值来循环
我想用Elixir对这个算法进行编码:Loops 而在Elixir中通过给变量重新赋值来循环,loops,while-loop,elixir,Loops,While Loop,Elixir,我想用Elixir对这个算法进行编码: var name = generate_name(); while (check_if_exists(name)) { name = generate_name(); } 我不能在Elixir中以同样的方式编码,因为必须有更为惯用和实用的方式。那我怎么做呢 长生不老药是一种药物。这意味着您不能修改变量的值,只能重新绑定它。因此,经典并不存在于长生不老药中 但是,您可以: def get_name do name = generate_name()
var name = generate_name();
while (check_if_exists(name)) {
name = generate_name();
}
我不能在Elixir中以同样的方式编码,因为必须有更为惯用和实用的方式。那我怎么做呢 长生不老药是一种药物。这意味着您不能修改变量的值,只能重新绑定它。因此,经典并不存在于长生不老药中
但是,您可以:
def get_name do
name = generate_name()
case check_if_exists(name) do
true -> get_name()
false -> name
end
end
长生不老药是一种药物。这意味着您不能修改变量的值,只能重新绑定它。因此,经典并不存在于长生不老药中
但是,您可以:
def get_name do
name = generate_name()
case check_if_exists(name) do
true -> get_name()
false -> name
end
end
另一种可能是创建一个无限的名称流,然后找到可用的第一个名称:
Stream.repeatedly(&generate_name/0)
|> Enum.find(&check_if_exists/1)
另一种可能是创建一个无限的名称流,然后找到可用的第一个名称:
Stream.repeatedly(&generate_name/0)
|> Enum.find(&check_if_exists/1)
指南建议仅对3+子句使用
case
:如果check\u如果存在(name),则执行:get\u name(),否则:name
。我可以很好地更改Elixirno中变量的值,无法更改变量的值-只能将其重新绑定到其他值。If/else只是上面带有true/false代码的case语句的宏。我选择了case
而不是If-else
,因为我更喜欢它,即使它是一个位于case
之上的宏,就像@FredtheMagicWonderDog所说的那样,指导原则建议只对3+子句使用case
:如果check\u如果存在(name),则执行:get\u name(),否则:name
。我可以很好地更改Elixirno中变量的值,无法更改变量的值-只能将其重新绑定到其他值。If/else只是上面带有true/false代码的case语句的宏。我选择了case
而不是If-else
,因为我更喜欢它,即使它是一个位于案例
之上的宏,就像@FredtheMagicWonderDog一样,saidOne方法是尝试将算法转换为映射/列表处理。generate_name()
或check_if_exists()
是否可以实现为处理映射/列表,比如可能/现有名称的映射/列表?在map
或使用exto的数据库查询中,有两种方法可以向前和键查找。一种方法是尝试将算法转换为map/list处理。generate_name()
或check_if_exists()
是否可以实现为处理映射/列表,比如可能/现有名称的映射/列表?在地图
或使用EXTO的数据库查询中进行两种方式的向前和键查找