gpt4 book ai didi

function - Elixir 中的返回值?

转载 作者:行者123 更新时间:2023-12-02 16:51:19 25 4
gpt4 key购买 nike

我最近决定学习 Elixir。来自 C++/Java/JavaScript 背景的我在掌握基础知识方面遇到了很多困难。这听起来可能很愚蠢,但是 return 语句在 Elixir 中如何工作呢?我环顾四周,似乎这只是函数的最后一行,即

def Hello do 
"Hello World!"
end

这个函数会返回“Hello World!”吗?还有其他方法可以返回吗?还有,怎么能早点回来呢?在 JavaScript 中,我们可以编写类似这样的代码来查找数组中是否具有特定值:

function foo(a){
for(var i = 0;i<a.length;i++){
if(a[i] == "22"){
return true;
}
}
return false;
}

这在 Elixir 中如何运作?

最佳答案

Elixir 没有与其他语言中的“return”关键字等效的“break out”关键字。

通常您要做的是重新构造代码,以便最后执行的语句是返回值。

下面是 Elixir 中执行与代码测试等效的惯用方法,假设您的意思是“a”,其行为类似于您最初的示例中的数组:

def is_there_a_22(a) do
Enum.any?(a, fn(item) -> item == "22" end.)
end

这里实际上发生的是我们正在稍微调整一下我们的想法。我们将在代码片段中询问您真正想要什么,而不是使用程序方法,在该方法中,我们会搜索数组并在找到所需内容后尽早返回:“这个数组中是否有 22?”

然后,我们将使用 elixir Enum 库来运行数组,并为 any? 函数提供测试,该测试将告诉我们是否有任何内容符合我们关心的条件。

虽然这是一个可以通过枚举轻松解决的情况,但我认为您问题的核心可能更多地适用于程序方法中使用的“弹跳器模式”等内容。例如,如果我在方法中满足某些条件,请立即返回。一个很好的例子是,如果您要处理的事情为 null,则返回 false 的方法:

function is_my_property_true(obj) {
if (obj == null) {
return false;
}
// .....lots of code....
return some_result_from_obj;
}

在 Elixir 中真正实现这一目标的唯一方法是将守卫放在前面并分解出一个方法:

def test_property_val_from_obj(obj) do
# ...a bunch of code about to get the property
# want and see if it is true
end

def is_my_property_true(obj) do
case obj do
nil -> false
_ -> test_property_value_from_obj(obj)
end
end

tl;dr - 不,没有等效的 - 您需要相应地构建代码。另一方面,这往往会保持你的方法较小 - 并且你的意图清晰。

关于function - Elixir 中的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37445838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com