快速入门
一、语句、hello world程序

语句是LAScript中的最小单元,即一句LAScript代码,用分号";"、空格、或者换行符表示一个语句的结束。
下面的脚本只有一个LAScript语句,
win.messageBox("hello world!");--这是一个语句,
win.messageBox是个函数(作用是弹出对话框),"hello world!"是字符串参数,分号";"表示一个语句结束。
字符串放在引号里,不在引号里的才是脚本代码,
--双横线后面是注释语句(编译时被忽略)。
下面我们再看一个示例(什么是变量)
str = "hello world!";
win.messageBox(str);-- 变量也可以代替实际的数据
再看一个示例(使用赋值语句改变变量的值)
str = "hello";
str2 = " world!";
str = str..str2;
win.messageBox(str);-- 变量也可以代替实际的数据
下面我们来通过一个较完整的hello world示例介绍脚本编写步骤。
1、切换到“源码编辑”界面,在工具栏点击“新建源代码”按钮(工具栏第一个按钮)。
2、在编辑器中输入脚本代码。
编辑器支持代码自动完成、代码智能提示。在您输入代码时会自动在「代码提示窗口」显示相关代码。
按键盘上的上下方向键移动光标、或者在「代码提示窗口」上移动鼠标可以选定需要的代码并查看相关说明。
用鼠标拖动「代码提示窗口」上的滚动条可以快速翻页,按键盘PageDown、PageUP可以快速翻页,按Home键滚动到第一页,按End键滚动到最后一页。
直接按回车键、或者鼠标双击选定的代码输入到编辑器中。
按ESC键、或者用鼠标左键在「代码提示窗口」以外的部份单击关闭自动完成窗口,不输入选定的代码。
按 Ctrl + j 快捷键可以强制显示「代码提示窗口」。
3、输入下面的LAScript代码以后按F5快捷键运行脚本。
win.consoleOpen(); --打开一个控制台窗口
print("hello world!"); -->在控制台窗口显示hello world!
delay(3000); --延时3秒(3000毫秒)
win.consoleClose(); --关闭控制台窗口
我们解释一下上面hello world程序中的语句。
win是一个
名字空间,
名字空间包含一组成员变量、成员函数。
就好象人有姓名一样,
名字空间就好比
人的姓表示一个
家族,而
变量名就好象
人的名字表示具体的对象。
win.consoleOpen
();是win名字空间下的一个
函数,其作用是打开一个控制台窗口,
调用函数时
函数名后面必须有一对括号,括号可以填写参数,这个函数没有参数,所以括号里没有内容。
print也是一个函数,但是在默认的全局名字空间下,
全局名字空间即_G名字空间,所以print也可以写为_G.print,print函数可以有任意多个参数,这个函数的作用是将所有的参数转换为字符串,并输出到控制台窗口。
"hello world!" 是一个字符串,字符串放在双引号中。
delay也是全局名字空间下的一个函数,作用是延时,delay有一个参数(数字值),指定延时的毫秒值(千分这一秒)。
--符号为两个短横线,表示后面直到这一行文本结束是注释语句,模拟精灵在编译LAScript代码时会忽略注释语句(即不会执行注释语句)。
二、语句块(chunk)、局部变量
语句块(chunk):由一组LAScript代码组成。是LAScript中的最小单元,语句块(chunk) 内部可以包含语句块。
一个LAS文件是一个大的语句块,fap文件中的脚本区块也是一个语句块。一个函数是一个语句块。do ...... end; 指定一个语句块。do表示语句块开始,end;表示语句块的结束。
变量:在脚本运行过程中,用来存储数据值并且其值能被改变的量称为变量。
变量的名称用字母、数字、中文字符、下划线等组成的标识符来表示。
局部变量:语句块(chunk) 内部可以用local语句声明的变量仅在语句块内部有效,称为局部变量。
使用局部变量有两个好处 1.避免命名冲突 2.访问局部变量的速度比全局变量更快.
示例:
win.consoleOpen();
local a = "123"; --声明一个变量a,a是一个合乎语法的标识符,存储的值为字符串"123",您可以改变a的值。
do --语句块开始
local a = ""hello"--local语句声明的局部变量a仅在语句块内部有效
a ="hello world!" --变量的值是可以改变的
print(a);-->显示hello world
end; --语句块结束
print(a); -->显示123
上面的例子中没有调用win.consoleClose();关闭控制台窗口,那么在脚本运行结束后控制台窗口并不关闭。这时候,我们点击“全部停止”按钮或者“全部停止热键”即可关闭控制台窗口。
三、全局变量
LAScript中的全局变量不需要声明(局部变量则必须用local语句声明),
给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil(空值的意思)
win.consoleOpen();
print(str) --> 显示nil
str = "一个字符串"
print(str) --> 显示一个字符串
--将变量赋值为nil空值可以删除一个变量
str = nil
print(str) --> 显示nil
LAScript允许全局变量与局部变量同名,在全局变量与当前作用域内局部变量同名时,LAScript优先使用局部变量。
例如:
str = "abc";
do
local str = str;
str = "123";
end;
四、定义函数、使用判断语句
函数是封装了一组LAScript代语句,函数是拥有函数名的一段子程序、函数名同时也是一个变量名,在定义了函数以后通过函数名可以调用函数。函数定义以 function() 开始 end;语句结束。在括号中可以定义参数,参数作为函数内部的局部变量。
下面我们自定义一个msg函数。函数的功能是执行一个判断并弹出一个对话框。
function msg(str) -- function语句定义一个函数
if(str)then --if语句判断str是不是一个有效的参数
win.messageBox(str); --如果str是一个有效的参数,弹出一个对话框显示str
else --否则
error("msg函数至少需要一个参数"); --抛出一个错误信息
end;
end;
msg("hello world!");--调用函数
msg(); --这句代码会导致错
在函数中我们使用了一个简单的判断语句,判断语句以if 开始 end;语句表示结束。
第一次调用 msg("hello world!");出现一个对话框显示hello world!。
第二次调用 msg();导致错误,并弹出错误提示。

五、LAScript代码书写规范
- 变量命名
- LAScript区分大小写。
- 变量名可以使用中文 或者下划线、字母、下划线、数字。
- 变量名不能以数字作为第一个字符。包含中文的变量名必须以中文作为每一个字符,中文变量名不能包含数字。

local 256var = 1;
local a变量名 = 2;
- 变量名以小写为主,第一个字符通常为小写,如果变量名由多个单词组成,
除第一个单词以外的其他单词第一个字符大写。

local strMsg = "hello world"; --正确
- 全局变量用_下划线开始,并以小写为主。

如果要声明全局变量,应在前面加上下划线以示区别,例如:
a =10 ;
_a =10 ;
- 系统变量以下划线开始并大写,不要改变系统变量的值。

以
下划线开始并大写的变量表示这是
系统保留的变量名(系统变量),在运行时不应当被修改。例如
_LASDIR 就是这样一个系统变量(存储脚本所在的目录路径),没有任何理由去改变 _LASDIR 的值,虽然你可以这么做。
- 所有变量名尽可能的用简洁清晰的命名,
简洁指的是可以缩写的单词使用最短的缩写,清晰指的是可以考虑用多个单词清晰的表达变量的意义。
- 优先使用标准变量名
在没有变量名冲突的情况下,应优先选用标准变量名。
模块对象,标准变量名使用 m,m2等
image对象, 标准变量名使用 img,img2等
color对象,标准变量名使用 cl,cl2等
web对象,标准变量名使用 wb,wb2等
循环、迭代、索引等标准变量名使用 i,j等
- 应该尽可能的使用局部变量(使用local语句声明),
这样做有两个好处:1.避免命名冲突 2.访问局部变量的速度比全局变量更快.
如:
a = 10; --不被推荐的写法
local a = 10 --推荐的写法
- 以下字符为LAScript的保留关键字,不能当作变量名。
and break do else elseif
end false for function if
in local nil not or
repeat return then true until
while namespace import
- 正确的代码分行
在LAScript中可以用空格、分号、换行来表示一句代码的结束。
不要在一行写太长的代码。适当的使用换行符号(分号; 可以忽略)
LAScript中,不允许连续的写两个分号,如";;"会导致错误

LAScript中,不允许连续的写两个分号,如";;"会导致错误
- 合理使用括号
在算术运行中必要的时候应当使用括号表示运算的先后顺序,如果多层嵌套括号最外层括号应间隔两个空格
如 a + b + c * 2 + 1这样的代码是不被推荐的,
你应当用括号显示的表示运算的先后顺序; 如( (a + b) + (c * 2) ) + 1;
下面的代码是不被推荐的
if a == 1 then
a = 2;
end;
标准的格式应当加上括号写成这样:
if( a == 1)then
a = 2;
end;
- 代码应正确反映逻辑结构和嵌套
标准嵌套块应缩进一个tab键(在模拟精灵中不允许使用四个空格键缩进)
在网页或其他地方发布源代码、文档等,应当重新处理源代码用四个空格键替换tab键(因为每个程序显示tab键的风格都不相同)。
- 注释
单行注释以两个短横线开始:
多行注释以--[[ 开始,以 --]] 结束,你可以在方括号( [[或]] )中间添加任意个数的'='符号,]] 中间的等号数目必须与[[中间的等号数目相同。
技巧 多行注释可以使一个语句块变为不执行的注释。
如果需要执行这个语句块。 可以在第一行注释之前再加一个短横线 - ,
由于第一行变为单行注释,而线束的 --]] 是 -- 开头的, 也自动变为单行注释了.
--[==[ --]==] LAScript是基于lua的子语言、兼容lua基本语法。
- LAScript是基于lua的子语言、兼容lua基本语法。