将 int 类型转换为 uint8
Converting an int type to a uint8
Lossless Automatic type conversion is performed in expressions where different kinds of integer types are used.
所以,我认为在 uint8
的范围内创建一个 int
可以让我将它传递给 proc
期望 uint8
的 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
而不是一个整数。第二个更清楚,但我预计此时会自动转换,因为 random
在 uint8
范围 (0..256) (documentation) 中生成 int
。
有没有办法将 int
转换为 uint8
?
random
过程定义为 return 和 int
。在此示例中最大值为 256
的事实未在类型系统中编码(如果 random
将 static[int]
作为参数,则可能是)。
"lossless conversion" 表示较小整数类型的值可以转换为较大整数类型的值(例如从 int8
到 int32
)。在此处的示例中,您正尝试在另一个方向上执行转换。您可以通过显式转换来解决错误:
let a = uint8(rand(256))
show a
# or
let b = rand(256)
show uint32(b)
p.p。您不需要将 discardable
编译指示添加到没有 return 值的过程中。
Lossless Automatic type conversion is performed in expressions where different kinds of integer types are used.
所以,我认为在 uint8
的范围内创建一个 int
可以让我将它传递给 proc
期望 uint8
的 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
而不是一个整数。第二个更清楚,但我预计此时会自动转换,因为 random
在 uint8
范围 (0..256) (documentation) 中生成 int
。
有没有办法将 int
转换为 uint8
?
random
过程定义为 return 和 int
。在此示例中最大值为 256
的事实未在类型系统中编码(如果 random
将 static[int]
作为参数,则可能是)。
"lossless conversion" 表示较小整数类型的值可以转换为较大整数类型的值(例如从 int8
到 int32
)。在此处的示例中,您正尝试在另一个方向上执行转换。您可以通过显式转换来解决错误:
let a = uint8(rand(256))
show a
# or
let b = rand(256)
show uint32(b)
p.p。您不需要将 discardable
编译指示添加到没有 return 值的过程中。