C++Virtools脚本语言(VSL)教程 – 值、类型和变量

 

VSL能辨识以下种类的值:

数字,如123、3.14159、’v’或0xe0d02090

逻辑布尔值:true或false

字符,如”Virtools,The Behavior Company”

出奇重点字null等于

类型

VSL是平种类型化的言语,这表示一旦我们所知道的在编译时(compilation
time)每个变量和每个表达式都带有类型。类型决定了运算的含义;强类型可以扶持在编译时检查错误。

VSL类型划分也3类:

主干型

VSL结构类型

C++ 类/结构类型

 

骨干项目即布尔型(bool)与数字型。数字型为整型(char,int)及浮点型(float)。

 

类型 内容 大小 取值范围
bool bool类型是一种整数类型。它用两个可能的值(用true或false来表示)代表逻辑数 4 Bytes true 或false (0 or 1)
char char类型也是一种整数类型,通常包含了ASCII字符集成员的执行。 4 Bytes -128 to 127
int int类型也是一种整数类型。等价于C/C++中的无符号的int类型。 4 Bytes ?147483647? to 2147483647
float float类型是一种浮点数类型。等价于C/C++中的float类型。 4 Bytes -3.402823466e+38F to 3.402823466e+38F
str str类型等价于C/C+中的char*类型。 4 Bytes

 

恰恰使你所呈现,所有VSL基本项目且是为4个字节实现的,在内存中是字组对齐方式,不叫其是否要再多空间的情况约束。例如,char类型仅得一个字节来表示ASCII码表中的分子,但于VSL中按用了4只字节。

 

VSL结构是在VSL中创造于定义数据类型的等同种植艺术。VSL结构可以生零个或多个分子,这些分子好是另外VSL中的曾清楚路。VSL结构与C的构造很相似。

布局声明实例:

struct Car
{
  Entity3D entity;
   Vector direction;
  float gaz;
};

 

VSL可以操作C/C++类型。在VSL中使用类(class)之前,你不能不绑定它。

VSL来源于很多Virtools SDK中的约束类(bound
classes)。大多数动静下,类的称从Virtools
SDK到VSL会发生反。对于Virtools
SDK用户来说,CK3dEntity是熟知的一个近似,但到了VSL它的名即成”Entity3D”了。 

变量

变量是一个存储单元,且带有一个彼此关联的种类,可能是中心类型、VSL结构还是C/C++类。变量总是噙一个与它的品类相兼容的所与的价值。变量值通过赋值或前缀式或后缀式
++ / –运算符来开展转移。

这里小在VSL中开展变量声明的实例:

// Declare an integer variable named "i"
int i;

// Declare an array of 123 float named "table"
float table[123];

// Declare a Vector variable named "speed", initialized with values 1.0, 2.0 and 3.0
Vector speed(1.0,2.0,3.0);

// Declare a variable referencing an Entity3D
Entity3D bird;

变量范围

VSL里变量名特会于先后的特定区域受到运用。这个区域叫做变量名的适用范围。适用范围觉得累变量叫作(指非静态或非共享变量)的生命周期。适用范围也决定了于调用类的构造器或析构器时变量名的可见性,及什么时候进行一些变量的初始化。

void foo(int a) // start of the function foo scope
{   
    if (a) // start of if scope
    {

    } // end of if scope
} // end of the function foo scope

给我们通过一个简约的实例来察看一下变量的生命周期:

float angle; // Declaring a global variable

void foo()
{
    angle = 0.01; // ok
}

void foo2(int a)
{
    angle = a*180/P; // error, P is not yet declared
    float P = 3.14159;

    if (a) // ok
    {
        float angle2 = 360-angle; // ok
    }
    bc.OutputToConsole(angle2); // it doesn't exist outside of the scope of the enclosing braces {...}

}

当你于一个函数外声明了一个变量时,它会为全局变量方式被调用,因为于现阶段VSL脚本的次第地方都是实用的。

静态和共享全局变量

我们的全局变量可以是共享式的或者静态的。

  • 静态全局变量具有在某某脚本的星星潮实行着维系它的价的特征。
  • 共享全局变量具有保持其的值静态不转换的力,但持有对拖欠变量进行了声称的底本间都可共享该变量。

怎样声明静态或共享全局变量

shared int a; // a is a shared global variable
static float b; // b is a static global variable

void main()
{
    shared int i;// i is not a shared variable (shared keyword is ignored)
    static float j;// j is not a static variable (static keyword is ignored)
    // ...
}

于宣称静态或共享全局变量时,你无法初始化或调用那种没有默认构造器环境的变量。

shared int a = 0; // error
static Vector v(1.0,2.0,3.0); // error

void main()
{
    static int b = 0; // Not an error because static keyword is ignored
    shared Vector w(-1,0,0); // Not an error because shared keyword is ignored
    // ...
}

静态全局变量

实例:

// ...
static int a;

void main()
{
    if (iIn1) { // iIn1 is a boolean global variable
        a = 0;
    } else {
        ++a;
    }
}

若是在我们先是破执行脚本的时节,iIn1为true,a等于0。
接下来,为了下一致不好下论实施时a的价值增加,我们以iIn1设为false,所以到早晚第二不行实施会拿a设为1,而第三糟糕则会以a设为2,等等。

共享全局变量

实例:

// First script
shared Vector pos;

void main()
{
    pos.Set(0,1,0.5);
}

// Second script
shared Vector pos; // the second script also declares pos as a shared Vector

void main()
{
    Vector test(0,1,0.5)
    if (pos == test) {
        // ...
    }
}

一旦我们以其次个本子执行了第一单剧本,pos的值是 {0,1,0.5}
,所以在亚独底论被原则 pos == test 为true。

变量名

以VSL中,一些一定的名是勿克看做变量名用的,如类/结构名及以下保留字:

main
int
short
float
char
while
do
bool
if
for
then
else
true
false
TRUE
FALSE
NULL
null
struct
class
enum
extern
shared
static 

switch
case
default
break
continue
return

编译器按以下顺序搜索名字,当找到了名时虽停:

自从当前界定及全局范围搜索

摸看名字是否为枚C++举值

招来看名字是否为定义的常量

void foo(int a)
{
 bc.OutputToConsole(pi); // print 3.14159 (pi is a constant in VSL)

    float pi = 1.0;

    if (a)
    {
        float pi = 0.5;
        bc.OutputToConsole(pi); // print 0.5
    }

    bc.OutputToConsole(pi); // print 1.0
}

enum Const
{
  pi,
    epsilon,
   maxint,
};


void foo(int a)
{
    bc.OutputToConsole(pi); // print 0

    float pi = 1.0;

    if (a)
    {
        float pi = 0.5;
        bc.OutputToConsole(pi); // print 0.5
    }

    bc.OutputToConsole(pi); // print 1.0
}