无损自动类型转换是在使用不同类型的整数类型的表达式中执行的。
所以,我认为在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
?
答案 0 :(得分:4)
random
proc定义为返回int
。在此示例中,最大值为256
的事实未在类型系统中进行编码(如果random
将static[int]
作为参数,则可能是这样。)
"无损转换"表示可以将较小整数类型的值转换为较大整数类型的值(例如,从int8
到int32
)。在此处的示例中,您尝试在另一个方向上执行转换。您可以通过明确转换来解决错误:
let a = uint8(rand(256))
show a
# or
let b = rand(256)
show uint32(b)
P.P。您不需要将discardable
pragma添加到不返回值的过程中。