为什么Elixir中没有return语句

mszmurlo

简而言之,为什么return在Elixir和某些(大多数?全部?)功能语言中没有声明?

为了使它更长一点,我遇到了这样的情况:在Java,Groovy,C,Ruby中……我会写一些类似的东西

def func (some, parameters) {

  # say some error
  if(condition 1) {
    return -1
  }

  # execute some function and return from here the result
  if(condition 2) {
    return process1(params)
  }

  # execute 'default' behavior when no condition matches and return result
  process2(params)
}

当然,这可以写为nested,if但是如果条件列表很长,则代码将变得不可读。

在Elixir中阅读了关于Return语句问题的答案:它们清楚地说明了如何实现这种模式,但没有解释没有这种原因的原因return

我相信拥有return会打破某些FP概念,但是我想知道哪个以及为什么。

菲利普·哈格隆德

因为还有其他方法可以完成类似Elixir的相同操作。

多功能头与您正在做的事情基本相同:

defp merge_sweep(a, [], _) when is_list(a), do: a
defp merge_sweep([], b, _) when is_list(b), do: b
defp merge_sweep([a|as], [b|bs], cmp) do
  if cmp.(a, b) do
    [a|merge_sweep(as, [b|bs], cmp)]
  else
    [b|merge_sweep([a|as], bs, cmp)]
  end
end

而且由于函数式编程中的函数没有任何副作用(暂时忽略:ets),所以为什么必须return到处编写您总是想在每个分支中返回某些内容,因此您最好总是总是在每个分支中返回最后一个表达式。

defer刚开始时就在Elixir中询问Golang的声明,因为我来自Go。只是每种语言都有不同的处理方式。用Python编写类似C的代码看起来很奇怪和陌生。


真正的答案可能是“因为Erlang没有”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么return语句没有执行?

为什么我的 return 语句没有显示任何输出?

为什么编程语言中没有“return if”语句?

为什么操作码中没有显示 if 语句?

为什么在此示例中Map会有return语句?

为什么当它被允许其它语句多余的分号没有return语句后允许的,?

Elixir中的return语句

为什么Python没有“ continue if”语句?

为什么else语句没有执行?

为什么没有return语句的main函数返回值12?

即使没有return语句,为什么此void函数仍返回整数?

Gulp任务在没有'return'语句的情况下运行得更快-为什么?

为什么Clang在没有return语句的块中被@try {}弄糊涂了?

当未指定return语句时,为什么C ++没有默认构造返回值?

Elixir为什么没有数学模块?

为什么在这段代码中的 if 语句之后没有运行 java 脚本循环?

为什么 Logger.log 语句没有显示在日志中?

如果mssql中存在ddl语句,为什么里面没有语义检查?

char c = 7; 为什么此语句将在Java中执行而没有错误?

为什么我的“选择变量”语句使存储过程没有在表中插入任何内容?

为什么什至没有创建对象时都执行类中的print语句?

为什么R中的`if语句'在没有逻辑条件的情况下被评估?

为什么 BigQuery 中的 case 语句没有按预期运行?

为什么我的输入语句没有将浮点数传输到列表中?

为什么我在React中可以省略带有括号的return语句

为什么循环没有打印正确的语句?

为什么switch语句中的个案没有自己的范围?

为什么此BigQuery WHERE NOT IN语句没有给出结果?

为什么我的URL.Path语句没有被点击