nim中单表达式proc的惯用方式

时间:2019-07-03 08:42:40

标签: nim

为什么我看到

proc simple(a, b: int) : int =
  result = a + b

在nim代码中经常出现,好像是

proc simple(a, b: int) : int =
  a + b

足够吗?我所缺少的两者之间在语义上有什么区别吗?

唯一隐式返回我在nim-lang上找到的最后一条语句的引用不是在manual中,而是在tut中声明所在

  

[...] proc的主体可以包含一个值为   然后隐式返回。

这似乎具有误导性:它似乎适用于每个“最后一个表达式”(除非已经设置了结果,否则必须丢弃该语句的结果)

2 个答案:

答案 0 :(得分:1)

在编码约定(https://nim-lang.org/docs/nep1.html#introduction-coding-conventions)中,他们建议仅在流程中需要时使用return

这本书Nim in Action说:“使用return关键字作为proc的最后一条语句并不是习惯用法”,但是对于result = a + ba + b来说并不清楚。从本书的摘要中,惯例似乎是:

  • 更喜欢a + b
  • 仅在您正在修改result = a + b时才使用result,就像result.add(b)一样。
  • 仅使用return a可以提前退出该过程。

这本书还列出了无法编译的陷阱:

proc resultVar: string = 
  result = "The result"
  "This cause an error"

result = a + breturn a这样的代码背后的原因是人们无法获得所有惯用语,特别是当他们是像我这样的初学者时。我仍然在Python代码中看到for i in range(len(variable)),它不仅是非Python语言的代码,而且丑陋且性能不佳。

答案 1 :(得分:0)

更奇特的功能之一是隐式结果变量:Nim中具有非无效返回类型的每个过程都有一个隐式结果变量,该变量代表将要返回的值[Wikipedia]。