将int类型转换为uint8

时间:2017-06-05 06:31:31

标签: nim

Nim Tutorial page州:

  

无损自动类型转换是在使用不同类型的整数类型的表达式中执行的。

所以,我认为在int范围内创建uint8可以让我将proc传递给uint8

但是,以下代码会引发带注释的错误:

import random

proc show(x: uint8) {.discardable.} = echo x

let a: int = 255
show(a)  # type mismatch: got (int) but expected one of proc show(x: uint8)

let b: uint8 = random(256)  # type mismatch: got (int) but expected 'uint8'
show(b)

我很困惑第一个,它告诉我它期望proc而不是int。第二个更清楚,但我预计此时会进行自动转换,因为random会在int范围(0..256)(documentation)中生成uint8

有没有办法将int转换为uint8

1 个答案:

答案 0 :(得分:4)

random proc定义为返回int。在此示例中,最大值为256的事实未在类型系统中进行编码(如果randomstatic[int]作为参数,则可能是这样。)

"无损转换"表示可以将较小整数类型的值转换为较大整数类型的值(例如,从int8int32)。在此处的示例中,您尝试在另一个方向上执行转换。您可以通过明确转换来解决错误:

let a = uint8(rand(256))
show a
# or
let b = rand(256)
show uint32(b)

P.P。您不需要将discardable pragma添加到不返回值的过程中。