类型转换

从语法上来说, 类型转换 类似于过程调用,只是用一个类型名替换了过程名。类型转换总是安全的,将类型转换失败会导致异常(如果不能静态确定)。

普通的 proc 通常比 Nim 中的类型转换更友好: 例如, $ 是 toString 运算符, 而 toFloat 和 toInt 可从浮点数转换为整数,反之亦然。

类型转换也可用于消除重载例程的歧义:

  1. proc p(x: int) = echo "int"
  2. proc p(x: string) = echo "string"
  3. let procVar = (proc(x: string))(p)
  4. procVar("a")

由于对无符号数的操作会环绕,且不会检查,因而到无符号整数的类型转换以及无符号整数之间的类型转换也会这样。 这样做的原因是,当算法从 C 移植到 Nim 时,可以更好地与 C 语言进行互操作。

例外: 将检查在编译时转换为无符号类型的值, 以使 byte(-1) 之类代码无法编译。

注意: 历史版本中不检查运算,有时会检查转换,但从 1.0.4 语言版本实现开始,转换 总是未检查