来自 proc 的隐式 return 值

Implicit return value from a proc

这里的 nim lang tutorial 说 -

A procedure that does not have any return statement and does not use the special result variable returns the value of its last expression.

为什么我的 echo res 打印 0 ?我不应该期望返回最后一条语句 a mod b (= 3) 吗?

proc divmod(a, b: int; res, remainder: var int): int =
  res = a div b        
  remainder = a mod b  
  

var
  x, y: int

let res: int = divmod(8, 5, x, y) # modifies x and y

echo res

在你的 divmod proc remainder = a mod b 中是一个语句,而不是一个表达式,所以 divmod returns 是 int 的默认值,它是 0。

我不确定你为什么要 return 可变参数和结果的余数,但你可以这样做:

proc divmod(a, b: int; res, remainder: var int): int =
  res = a div b        
  remainder = a mod b
  remainder # or result = remainder
  

var
  x, y: int

let res: int = divmod(8, 5, x, y) # modifies x and y

echo res

如果您真的不需要修改现有值,那么可以通过以下方式重新制作您的过程:

proc divmod(a, b: int): (int, int) =
  (a div b, a mod b)

let (x, y) = divmod(8, 5)

echo x, " ", y