JSRUN 用代码说话

枚举类型

编辑教程

枚举类型

一个枚举类型变量只能被赋值一个有限的集合。这个集合有有序的符号组成。每个符号内部映射到一个整数值。第一个符号在运行时用0表示,第二个用1表示等等。例如:

type
  Direction = enum
    north, east, south, west

var x = south      # `x` is of type `Direction`; its value is `south`
echo($x)           # writes "south" to `stdout`

所有的比较运算符都可以用枚举类型。

一个枚举符号可以避免歧义:Direction.south。

$操作符可以将任何枚举类型的值转换为它的名字,ord过程转化为它们基本的整数值。

为了更好的连接到其他语言中,枚举类型符号可以被赋值一个明确的序号值。然而,这个序号值必须是升序类型。一个符号的有序值没有明确的给出将会被赋值为前一个符号值+1.

一个明确的有序枚举可以有孔 (注:一个明确的有序类型的序数值可以不是连续的值)

type
  MyEnum = enum
    a = 2, b = 4, c = 89

序数类型

连续的枚举类型,整形,字符,以及布尔类型(和子类型)称作序数类型。序数类型有相当多的特殊操作:

操作 描述
ord(x) 返回x的整型值
inc(x) x的值+1
inc(x, n) x的值+n,n为整数
dec(x) x的值-1
dec(x, n) x的值-n,n为整数
succ(x) 返回x的下一个值
succ(x, n) 返回x后的第n个值
pred(x) 返回x的前一个值
pred(x, n) 返回x的第前n个值

inc,dec,succ,pred操作会失败通过产生EOutOfRange(越界),EOverflow(溢出)异常。(如果代码编译已经有适当的运行时检查打开)

子类型

子类型是一个来自整形或者枚举类型(基本类型)的范围值。例如:

type
  Subrange = range[0..5]

Subrange是一个int的子类型,它只能容纳从0到5的值。给Subrange子类型变量赋任何值都会出现编译或运行时错误。从基本类型给它的一个子类型赋值是允许的(反之亦然)。

系统模型定义了重要的自然类型范围 0...high(int)。其他编程语言授权自然类型使用无符号数。

这通常是错误的:你不想无符号计算仅仅是因为这个数不能为负。nim的自然类型帮助避免这种常见的编程错误。

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟