来自 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
这里的 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