1.全局变量
没有对应的修饰符,在所有类/module外定义即可在这些类/module中使用.
该类型变量仅可与const类型混用。
如图所示,在class和module外定义,可以在这些class和module中使用,共用同一个数据。
2.local/protect/public
互质类型,主要在class中区分类型,可以与3类型混用
2.1 public
无对应修饰符,为默认类型。作用域最大,可在子类和外部中使用。
2.2 protect
仅在class中能定义该类型变量,修饰符为protected,可在子类中修改使用,不可在外部使用
2.3 local
仅在class中能定义该类型变量,修饰符为local,作用域最小,仅可在本类中使用,不可在子类和外部使用
2.4 示例
在父类father中分别定义三种类型变量,且在函数中赋值。
在子类son中可以直接使用public类型和protect类型变量,若是使用local类型变量将会报错
在module中例化father类,仅可以使用public类型变量,若是调用local/protect类型变量将会报错
3.const/static/automatic
互质类型,不可同时使用,可与类型2混用
3.1 const
常量类型,修饰符为const,仅可在初始化时赋值,若无赋值,将默认为0,后续赋值将会报错,该类型变量可以与1,2的类型混用。
SV的语法中,若是在定义时赋值,需要写在未赋值的所有定义变量后面,否则将会报错。但常量的定义和赋值可以写在未赋值的定义变量前不会报错。
3.2 static
静态变量,修饰符为static,在定义时将会被分配一个固定存储空间,每次回到定义/调用函数将会使用上次结束值.
3.3 automatic
动态变量,修饰符为automatic,在函数中定义该类型变量,每次结束函数都会收回为变量分配的空间,下次进入函数时将会为初始值。
3.4 默认类型
在该组中没有默认类型,因为在class内定义的默认变量和在module中定义的默认变量的类型是不一致的。在module中定义的默认类型(不加修饰符)为static类型的变量,即将会被分配固定空间。在class中定义的默认变量为automatic类型的变量,每次进入函数都将会分配新的默认值。
3.5示例
在class/module中分别定义默认类型,automatic类型,static类型。并循环两次打印。
可以得到打印结果:
看到class中的变量default类型和automatic类型的现象一致,每次进入函数都是默认值1,而static变量在第二次/第n次进入函数时将忽略默认值配置,使用上次的结果值。
而module中定义的默认类型与static类型现象一致。