可爱的松鼠Squirrel脚本引擎学习笔记(3)
2013-03-25 11:11
295 查看
转自:http://blog.chinaunix.net/uid-8272118-id-2033345.html
北京理工大学 20981 陈罡
(1)Null
用来表示空,不存在的引用。这个Null的数据类型的可取值只有一个,就是null。
例如:
local a = null ;
(2)Bool
该数据类型,只有true和false两种取值。
(3)Table
这东西感觉上跟c语言的结构体挺像的,只不过做为脚本来说是这里定义的结构体
的成员变量是可以动态添加和删除的。
例如:
local t = {} ; // 这种方式定义table就代表是一个空的表对象,没有定义任何变量
// 感觉上可以认为是定义了一个没有任何成员变量的空结构体
t.a = 6 ; // 这一句一定是错的,因为此时t表对象还没有动态创建一个叫做a的
// 数据成员,因此直接用等号赋值,就会出现a没有定义的错误。
t.a <- 3 ; // 这一步是动态给这个结构体创建成员变量了。这里使用"<-"来表示
// 如果t结构体有t.a这个成员变量,则直接跟赋值语句一样把3这个整数
// 直接赋值给t.a变量;如果t结构体没有t.a这个成员变量,则会自动
// 创建一个叫做t.a的成员变量,然后把整数3赋值给t.a。
t.a = 5 ; // 这个时候由于已经通过“t.a <- 3”为t表创建了a这个变量,因此可以用
// t.a = 5这个赋值语句来对该变量进行操作。
delete t.a ; // 这一步就是动态删除掉t表对象的t.a这个成员变量,如果在这句以后
// 再次调用t.a = xxxx,系统就会报错,说t表里面不存在a这个变量。
t.a = 4 ; // 这一句就会出错,因为delete t.a这一句,已经把t表的a对象动态删除,
// 这时候就会出现a没有定义的错误。
// 以下这些也是合法的,意思是在声明名字叫做test的表类型的对象的时候,为该对象
// 创建两格成员变量a和b并且分别赋以初值。
local test =
{
a = 0
b = function(a) { return a + 1 ; }
} ;
有几点需要注意的地方,对于table类型的变量,
(4)Array
就是数组了,很常见,可以保存一组连续的对象。与传统c/c++相比,squirrel
中定义的数组是支持动态调整数组的大小的(这一点玩过MFC的朋友,会立即
联想到CArray,hoho)。另外跟c/c++一样,下标通常从0开始。
local a = {"I'm", "an", "array"} ;
local b = {null} ;
b[0] = a[2] ;
(5)Function
首先,函数是可以做为跟整数或字符串一样,存放到Table里面的(这个时候叫key/slot),
也可以存放到数组,还可以做为其它函数的参数传入到其它的函数中去。函数可以用
squirrel脚本本身去定义和实现,也可以用实现squirrel的内部语言(说话费劲,其实就是
说的是c/c++语言,这里的意思是,可以通过自己修改sq的代码,在代码里面构造一些“内置”
的函数,可以在脚本里面去调用这些函数用以实现特殊的功能和要求。呵呵,这是必然的了,
要不干嘛玩这个东西呢?通过脚本去调用c/c++的模块,是偶研究squirrel的最终目标。)
Function定义方法(这里都是指在脚本里面定义函数的方法)
1)使用函数表达式的定义方法
例如:
local a = function(a, b, c) {return a + b - c ; }
2)使用常规语法定义函数
例如:
function foo(a, b, c)
{
return a + b - c ;
}
也可以这样写:
this.foo <- function(a, b, c)
{
return a + b - c ;
}
还可以这样写:
T <- {}
function T::foo(a, b, c)
{
return a + b - c ;
}
...我有点晕了,也可以这样写:
T.foo <- function(a, b, c)
{
return a + b - c ;
}
彻底疯了,竟然还可以这样写:
T <- {
function foo(a, b, c)
{
return a + b - c ;
}
}
前面几个还好,后面这个就有些让人头晕了。
参考一下Table就可以清楚地看出来,这个“<-”是用来为table类型的表对象
创建插槽(slot)的,如果插槽不存在则会创建这个插槽,如果插槽存在则与传统
的等号赋值运算符的操作是一样的。
3)支持缺省值定义的函数
这个特性对于c++和java类的面向对象编程语言来说,都是常规功能了。
function test(a,b,c = 10, d = 20)
{
....
}
4)下面这个挺重要的,就是支持变参数的函数定义
这个就类似于printf之类的函数,可以支持不定个数的参数的函数定义,
来段代码就能够直接解释这个问题了。
function test(a,b,...)
{
for(local i = 0; i< vargc; i++)
{
::print("varparam "+i+" = "+vargv[i]+"\n");
}
}
test("goes in a","goes in b",0,1,2,3,4,5,6,7,8);
呼呼,时间过得真快,又到了睡觉的时间,明天再继续。
今天感觉上已经渐渐地明白squirrel的语法到底是怎么回事了,呵呵,再接再厉。
北京理工大学 20981 陈罡
(1)Null
用来表示空,不存在的引用。这个Null的数据类型的可取值只有一个,就是null。
例如:
local a = null ;
(2)Bool
该数据类型,只有true和false两种取值。
(3)Table
这东西感觉上跟c语言的结构体挺像的,只不过做为脚本来说是这里定义的结构体
的成员变量是可以动态添加和删除的。
例如:
local t = {} ; // 这种方式定义table就代表是一个空的表对象,没有定义任何变量
// 感觉上可以认为是定义了一个没有任何成员变量的空结构体
t.a = 6 ; // 这一句一定是错的,因为此时t表对象还没有动态创建一个叫做a的
// 数据成员,因此直接用等号赋值,就会出现a没有定义的错误。
t.a <- 3 ; // 这一步是动态给这个结构体创建成员变量了。这里使用"<-"来表示
// 如果t结构体有t.a这个成员变量,则直接跟赋值语句一样把3这个整数
// 直接赋值给t.a变量;如果t结构体没有t.a这个成员变量,则会自动
// 创建一个叫做t.a的成员变量,然后把整数3赋值给t.a。
t.a = 5 ; // 这个时候由于已经通过“t.a <- 3”为t表创建了a这个变量,因此可以用
// t.a = 5这个赋值语句来对该变量进行操作。
delete t.a ; // 这一步就是动态删除掉t表对象的t.a这个成员变量,如果在这句以后
// 再次调用t.a = xxxx,系统就会报错,说t表里面不存在a这个变量。
t.a = 4 ; // 这一句就会出错,因为delete t.a这一句,已经把t表的a对象动态删除,
// 这时候就会出现a没有定义的错误。
// 以下这些也是合法的,意思是在声明名字叫做test的表类型的对象的时候,为该对象
// 创建两格成员变量a和b并且分别赋以初值。
local test =
{
a = 0
b = function(a) { return a + 1 ; }
} ;
有几点需要注意的地方,对于table类型的变量,
(4)Array
就是数组了,很常见,可以保存一组连续的对象。与传统c/c++相比,squirrel
中定义的数组是支持动态调整数组的大小的(这一点玩过MFC的朋友,会立即
联想到CArray,hoho)。另外跟c/c++一样,下标通常从0开始。
local a = {"I'm", "an", "array"} ;
local b = {null} ;
b[0] = a[2] ;
(5)Function
首先,函数是可以做为跟整数或字符串一样,存放到Table里面的(这个时候叫key/slot),
也可以存放到数组,还可以做为其它函数的参数传入到其它的函数中去。函数可以用
squirrel脚本本身去定义和实现,也可以用实现squirrel的内部语言(说话费劲,其实就是
说的是c/c++语言,这里的意思是,可以通过自己修改sq的代码,在代码里面构造一些“内置”
的函数,可以在脚本里面去调用这些函数用以实现特殊的功能和要求。呵呵,这是必然的了,
要不干嘛玩这个东西呢?通过脚本去调用c/c++的模块,是偶研究squirrel的最终目标。)
Function定义方法(这里都是指在脚本里面定义函数的方法)
1)使用函数表达式的定义方法
例如:
local a = function(a, b, c) {return a + b - c ; }
2)使用常规语法定义函数
例如:
function foo(a, b, c)
{
return a + b - c ;
}
也可以这样写:
this.foo <- function(a, b, c)
{
return a + b - c ;
}
还可以这样写:
T <- {}
function T::foo(a, b, c)
{
return a + b - c ;
}
...我有点晕了,也可以这样写:
T.foo <- function(a, b, c)
{
return a + b - c ;
}
彻底疯了,竟然还可以这样写:
T <- {
function foo(a, b, c)
{
return a + b - c ;
}
}
前面几个还好,后面这个就有些让人头晕了。
参考一下Table就可以清楚地看出来,这个“<-”是用来为table类型的表对象
创建插槽(slot)的,如果插槽不存在则会创建这个插槽,如果插槽存在则与传统
的等号赋值运算符的操作是一样的。
3)支持缺省值定义的函数
这个特性对于c++和java类的面向对象编程语言来说,都是常规功能了。
function test(a,b,c = 10, d = 20)
{
....
}
4)下面这个挺重要的,就是支持变参数的函数定义
这个就类似于printf之类的函数,可以支持不定个数的参数的函数定义,
来段代码就能够直接解释这个问题了。
function test(a,b,...)
{
for(local i = 0; i< vargc; i++)
{
::print("varparam "+i+" = "+vargv[i]+"\n");
}
}
test("goes in a","goes in b",0,1,2,3,4,5,6,7,8);
呼呼,时间过得真快,又到了睡觉的时间,明天再继续。
今天感觉上已经渐渐地明白squirrel的语法到底是怎么回事了,呵呵,再接再厉。
相关文章推荐
- 【学习笔记】Cocos2d-x Lua脚本引擎之HelloLua分析笔记
- Nebula3学习笔记(8): 脚本系统
- 学习Android Opengles 做游戏引擎笔记(二)
- shell脚本学习笔记 (文本处理器AWK)
- perl脚本学习笔记
- PHP学习笔记02——简单的php脚本
- Flixel引擎学习笔记
- Sandy引擎学习笔记:摄影机
- 【Cocos2d-html5游戏引擎学习笔记(12)】Schedule定时器
- 【学习笔记】【Cocos2d-x Lua脚本开发】Lua中创建自定义类
- vbscript&nbsp;脚本学习笔记不断更新&lt;一…
- 【Cocos2d-html5游戏引擎学习笔记(10)】自定义精灵动画
- ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
- shell脚本学习笔记(三)—— if、xargs、awk
- 伟东山视频自学笔记——Linux链接脚本学习--lds
- shell脚本学习笔记(符号)
- 【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠
- Unity3D 学习笔记(二)脚本的使用
- Linux shell 脚本攻略学习笔记4
- ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习