蘭州易天網(wǎng)站建設(shè)公司有哪些cpm廣告聯(lián)盟平臺(tái)
1、詞匯結(jié)構(gòu)
(1)標(biāo)識(shí)符
標(biāo)識(shí)符以字母字符或“_”開(kāi)頭,后跟任意數(shù)量的字母字符,“_”或數(shù)字([0-9])。 是一種區(qū)分大小寫(xiě)的語(yǔ)言,這意味著同一個(gè)字母字符的小寫(xiě)和大寫(xiě)表示被視為不同的字符。 例如,“foo”,“Foo”和“fOo”將被視為3個(gè)不同的標(biāo)識(shí)符。
(2)關(guān)鍵字
以下單詞是語(yǔ)言的保留字,不能用作標(biāo)識(shí)符:
base | break | case | catch | class | clone |
continue | const | default | delete | else | enum |
extends | for | foreach | function | if | in |
local | null | resume | return | switch | this |
throw | try | typeof | while | yield | constructor |
instanceof | true | false | static | __LINE__ | __FILE__ |
(3)操作符
! | != | || | == | && | >= | <= | > |
<=> | + | += | - | -= | / | /= | * |
*= | % | %= | ++ | -- | <- | = | & |
^ | | | ~ | >> | << | >>> |
(4)其他符號(hào)
{ | } | [ | ] | . | : |
:: | ' | ; | " | @" |
- 常量
一些常量的表示方法:
34 --->十進(jìn)制的整數(shù)
0xFF00A120 --->十六進(jìn)制的整數(shù)
0753 --->八進(jìn)制的整數(shù)
'a' --->整數(shù),表示字母A所對(duì)應(yīng)的ascii碼
1.52 --->浮點(diǎn)數(shù)
1.e2 --->科學(xué)計(jì)數(shù)法表示的浮點(diǎn)數(shù)
1.e-2 --->也是科學(xué)計(jì)數(shù)法表示的浮點(diǎn)數(shù)
"I'm a string" --->常規(guī)的字符串
@"I'm a verbatim string" --->另外一種表達(dá)形式的字符串
@" I'm a multiline verbatim string
(6)注釋
// 單行注釋
/* */ 多行注釋
2、值和數(shù)據(jù)類(lèi)型
(1)Interger
整數(shù)表示32位的帶符號(hào)數(shù):
local a = 123 //十進(jìn)制
local b = 0x0012 //十六進(jìn)制
local c = 075 //八進(jìn)制
local d = 'w' //把'w'的ascii碼的數(shù)值附給d
(2)Float
float表示32位的浮點(diǎn)數(shù):
local a=1.0
local b=0.234
(3)String
字符串是一個(gè)不可變的字符序列,修改字符串是創(chuàng)建一個(gè)新字符串。
字符串用引號(hào)(“)分隔,可以包含轉(zhuǎn)義序列(\ t,\ a,\ b,\ n,\ r,\ v,\ f,\\,\”, \',\ 0,\ x <hh>,\ u <hhhh>和\ U <hhhhhhhh>)。
照字面的字符串文字以@“開(kāi)頭并以匹配的引號(hào)結(jié)尾。照字面的字符串文字也可以延伸到換行符。如果它們這樣做,它們包括引號(hào)之間的任何空格字符:
local a = "I'm a wonderful string\n"
//?在字符串的末尾有一個(gè)換行符
local x = @"I'm a verbatim string\n"
// \ n被復(fù)制到與常規(guī)字符串中的\\ n相同的字符串中“I'm a verbatim string\n”
對(duì)于逐字字符串文字的“無(wú)轉(zhuǎn)義序列”規(guī)則的唯一例外是,您可以通過(guò)兩個(gè)雙引號(hào)來(lái)轉(zhuǎn)義雙引號(hào):
local multiline = @"
????this is a multiline string
????it will ""embed"" all the new line
????characters
"
(4)Null
null值是一個(gè)原始值,表示null,empty或不存在的引用。 Null類(lèi)型只有一個(gè)值,稱(chēng)為null:
local a = null
(5)Bool
bool數(shù)據(jù)類(lèi)型只能有兩個(gè)。 該數(shù)據(jù)類(lèi)型,只有true和false兩種取值
(6)Array
數(shù)組是簡(jiǎn)單的對(duì)象序列,它們的大小是動(dòng)態(tài)的,它們的索引始終從0開(kāi)始:
local a ?= ["I'm","an","array"]
local b = [null]
b[0] = a[2];
local x = []; //定義數(shù)組
x.resize(20);//調(diào)整數(shù)組的大小
(7)Function
函數(shù)類(lèi)似于其他類(lèi)C語(yǔ)言和大多數(shù)編程語(yǔ)言的函數(shù),但是有一些關(guān)鍵的區(qū)別
函數(shù)聲明
function fun1(a,b,c)
{
????return a+b-c;
}
默認(rèn)參數(shù)
函數(shù)可以有默認(rèn)參數(shù)。
具有默認(rèn)參數(shù)的函數(shù)聲明如下:
function test(a,b,c = 10, d = 20)
{
????....
}
當(dāng)調(diào)用函數(shù)test并且未指定參數(shù)c或d時(shí),VM會(huì)自動(dòng)將默認(rèn)值分配給未指定的參數(shù)。 默認(rèn)參數(shù)可以是任何有效的表達(dá)式。 表達(dá)式在運(yùn)行時(shí)進(jìn)行檢查。
函數(shù)調(diào)用
foo(x,y) ;
3、聲明
程序是一個(gè)簡(jiǎn)單的語(yǔ)句序列:
stats := stat [';'|'\n'] stats
語(yǔ)句與C系列語(yǔ)言(C / C ++,Java,C#等......)相當(dāng):賦值,函數(shù)調(diào)用,程序流控制結(jié)構(gòu)等。加上一些自定義語(yǔ)句,如yield,table和array constructors。 語(yǔ)句可以用新行或';'(或使用關(guān)鍵字case或default,如果在switch / case語(yǔ)句中)分隔,如果語(yǔ)句后跟'}',則不需要這兩個(gè)符號(hào)。
(1)語(yǔ)句塊
由大括號(hào)({})分隔的一系列語(yǔ)句稱(chēng)為塊; 塊是一個(gè)聲明本身。
(2)?控制流程語(yǔ)句
最常見(jiàn)的控制流語(yǔ)句:
if,?while,?do-while,?switch-case,?for
(2.1)true and false
布爾類(lèi)型(bool),它認(rèn)為null,0(整數(shù))和0.0(浮點(diǎn))為false,任何其他值都被認(rèn)為是true的。
(2.2) if/else
根據(jù)表達(dá)式的結(jié)果有條件地執(zhí)行語(yǔ)句:
if(a>b)
????a=b;
else
????b=a;
if(a==10)
{
????b=a+b;
????return a;
}
(2.3) while
條件為真時(shí)執(zhí)行語(yǔ)句:
function testy(n)
{
????local a=0;
????while(a<n) a+=1;
????while(1)
????{
????????if(a<0) break;
????????a-=1;
????}
}
(2.4)do/while
執(zhí)行一次語(yǔ)句,然后重復(fù)執(zhí)行語(yǔ)句,直到條件表達(dá)式求值為false:
local a=0;
do
{
????print(a+"\n");
????a+=1;
} while(a>100)
(2.5) switch
Switch是一個(gè)控制語(yǔ)句,允許通過(guò)將控制權(quán)傳遞給其正文中的一個(gè)case語(yǔ)句來(lái)多次選擇代碼。 如果case都不匹配會(huì)跳轉(zhuǎn)到default標(biāo)簽(如果存在),如果是case實(shí)例,則控制將轉(zhuǎn)移到case_exp與exp匹配的case標(biāo)簽。switch語(yǔ)句可以包含多個(gè)case,如果2個(gè)case具有相同的表達(dá)式結(jié)果,則將首先考慮第一個(gè)。default標(biāo)簽只允許一次,必須是最后一個(gè)。 break語(yǔ)句將跳轉(zhuǎn)到switch塊之外。
Local i=0;
switch(i)
{
case 0:
????break;
case 1:
????break;
default:
????break;
}
(3) 循環(huán)
(3.1) for
只要條件不等于false,就執(zhí)行一個(gè)語(yǔ)句:
for(local a=0;a<10;a++)
{
print(a+"\n");
}
for(;;)
{
????print(loops forever+"\n");
}
(4) break
break語(yǔ)句終止循環(huán)的執(zhí)行(for,while或do / while)或跳出switch語(yǔ)句;
(5) continue
continue運(yùn)算符跳轉(zhuǎn)到循環(huán)的下一次迭代,跳過(guò)以下語(yǔ)句的執(zhí)行。
(6) return
return語(yǔ)句終止當(dāng)前函數(shù)/生成器的執(zhí)行,并可選擇返回表達(dá)式的結(jié)果。 如果省略表達(dá)式,則函數(shù)將返回null。 如果在發(fā)生器內(nèi)使用return語(yǔ)句,則生成器將不再可恢復(fù)。
(7) 局部變量聲明
可以在程序中的任何位置聲明局部變量; 它們存在于它們的聲明到它們已被聲明的塊的末尾之間。 允許局部變量聲明語(yǔ)句作為for循環(huán)中的第一個(gè)表達(dá)式:
for(local a=0;a<10;a+=1)
????print(a);
(8) 函數(shù)聲明
創(chuàng)建一個(gè)新函數(shù)
function fun1(a,b,c)
{
????return a+b-c;
}
(9) 常量
常量將特定值綁定到標(biāo)識(shí)符。 常量類(lèi)似于全局值,除了它們是在編譯時(shí)計(jì)算的,并且它們的值不能更改。
常量值只能是整數(shù),浮點(diǎn)數(shù)或字符串文字。 不允許表達(dá)式。 使用以下語(yǔ)法聲明:
const foobar = 100;
const floatbar = 1.2;
const stringbar = "I'm a contant string";
常量始終是全局范圍的,從聲明它們的那一刻起,任何后續(xù)代碼都可以引用它們。
(10) 枚舉
作為常量,枚舉將特定值綁定到名稱(chēng)。 枚舉也在編譯時(shí)進(jìn)行評(píng)估,其值不能更改。
枚舉聲明在程序中引入了新的枚舉。 枚舉值只能是整數(shù),浮點(diǎn)數(shù)或字符串文字。 不允許表達(dá):
enum Stuff {
??first, //this will be 0
??second, //this will be 1
??third //this will be 2
}
或
enum Stuff {
??first = 10
??second = "string"
??third = 1.2
}
以與訪(fǎng)問(wèn)靜態(tài)類(lèi)成員類(lèi)似的方式訪(fǎng)問(wèn)枚舉值。 必須使用枚舉的名稱(chēng)限定成員的名稱(chēng),例如Stuff.second Enumerations將影響具有相同名稱(chēng)的任何全局槽(使用::語(yǔ)法將保持全局槽可見(jiàn)):
local x = Stuff.first * 2;
(11) 表達(dá)式
每個(gè)表達(dá)式也被允許作為語(yǔ)句
4、表達(dá)式
(1) 賦值
正常賦值(=):
a = 10;
(2) 操作符
(2.1) ?: 操作符
根據(jù)表達(dá)式的結(jié)果有條件地評(píng)估表達(dá)式。
local a=0;
local x=(a>10)?1:0;
(2.2) 算術(shù)操作符
支持標(biāo)準(zhǔn)算術(shù)運(yùn)算符+, - ,*,/和%。 除此之外還支持聯(lián)合運(yùn)算符(+ =, - =,* =,/ =,%=)和遞增和遞減運(yùn)算符(++和 - );:
a += 2;
//is the same as writing
a = a + 2;
x++
//is the same as writing
x = x + 1
所有操作符都可以正常使用整數(shù)和浮點(diǎn)數(shù); 如果一個(gè)操作數(shù)是一個(gè)整數(shù)而一個(gè)是浮點(diǎn)數(shù),則表達(dá)式的結(jié)果將是float。 +運(yùn)算符具有字符串的特殊行為; 如果其中一個(gè)操作數(shù)是一個(gè)字符串,則operator +將嘗試將另一個(gè)操作數(shù)轉(zhuǎn)換為字符串并將它們連接在一起。 對(duì)于實(shí)例和表,調(diào)用_tostring。
(2.3) 關(guān)系操作符
關(guān)系運(yùn)算符是:==,?<,?<=,?<,?<=,?!=
(2.4) 邏輯運(yùn)算符
邏輯運(yùn)算符是:&&,|| ,!
如果第一個(gè)參數(shù)為null,則運(yùn)算符&&(邏輯與)返回null,否則返回其第二個(gè)參數(shù)。 操作符|| (邏輯或)如果不是null則返回其第一個(gè)參數(shù),否則返回第二個(gè)參數(shù)。
如果給定的否定值不是null,則'!'運(yùn)算符將返回null,如果給定的值為null,則返回不為null的值。
(2.6) 逗號(hào)操作符
逗號(hào)運(yùn)算符從左到右計(jì)算兩個(gè)表達(dá)式,運(yùn)算符的結(jié)果是右邊表達(dá)式的結(jié)果; 左表達(dá)式的結(jié)果被丟棄:
local j=0,k=0;
for(local i=0; i<10; i++ , j++)
{
????k = i + j;
}
local a,k;
a = (k=1,k+2); //a becomes 3
(2.7) 位操作符
支持標(biāo)準(zhǔn)的運(yùn)算符&,|,^,?,<<,>>加上無(wú)符號(hào)右移運(yùn)算符<<<。?除了將左操作數(shù)視為無(wú)符號(hào)整數(shù)外,無(wú)符號(hào)右移與普通右移運(yùn)算符(<<)完全相同,因此不受符號(hào)的影響。?這些運(yùn)算符僅處理整數(shù)值,將任何其他操作數(shù)類(lèi)型傳遞給這些運(yùn)算符將導(dǎo)致異常。
(2.8) 運(yùn)算符優(yōu)先級(jí)
-,?~,?!,?typeof?,?++,?-- | 最高 |
/,?*,?% | ... |
+,?- | |
<<,?>>,?>>> | |
<,?<=,?>,?>= | |
==,?!=,?<=> | |
& | |
^ | |
&&,?in | |
+=,?=,?-= | ... |
,(comma?operator) | 最低 |
(2.9) Integer整數(shù)
integer.tofloat()
將數(shù)字轉(zhuǎn)換為float并返回它
integer.tostring()
將數(shù)字轉(zhuǎn)換為字符串并返回它
integer.tochar()
返回包含由整數(shù)表示的單個(gè)字符的字符串。
(2.10) Float浮動(dòng)數(shù)
float.tointeger()
將數(shù)字轉(zhuǎn)換為整數(shù)并返回它
float.tostring()
將數(shù)字轉(zhuǎn)換為字符串并返回它
float.tochar()
返回一個(gè)字符串,其中包含由float的整數(shù)部分表示的單個(gè)字符。
(2.11) Bool 邏輯
bool.tofloat()
返回1.0表示true為0.0表示false
bool.tointeger()
返回1表示true為0表示false
bool.tostring()
返回“true”表示true為“false”表示false
(2.12) String 文本
string.len()
返回字符串長(zhǎng)度
string.tointeger([base])
將字符串轉(zhuǎn)換為整數(shù)并返回它??梢灾付蛇x參數(shù)base,如果未指定base,則默認(rèn)為base 10
string.tofloat()
將字符串轉(zhuǎn)換為float并返回它
string.tostring()
返回字符串(虛函數(shù))
string.slice(start[,?end])
返回字符串的一部分作為新字符串。復(fù)制從start到end(不包含)。 如果start為負(fù),則索引計(jì)算為length + start,如果end為負(fù),則索引計(jì)算為length + end。 如果省略end,則end等于字符串長(zhǎng)度。
string.find(substr[,?startidx])
從索引startidx開(kāi)始搜索子字符串(substr)并返回其第一次出現(xiàn)的索引。 如果省略startidx,則搜索操作從字符串的開(kāi)頭開(kāi)始。 如果未找到substr,則該函數(shù)返回null。
string.tolower()
返回字符串的小寫(xiě)副本。
string.toupper()
返回字符串的大寫(xiě)副本。
format 格式化字符串
format(formatstr,?...)
返回根據(jù)formatstr格式化的字符串以及其后的可選參數(shù)。 格式字符串遵循與標(biāo)準(zhǔn)C函數(shù)的printf系列相同的規(guī)則(不支持“*”)。
sq> print(format("%s %d 0x%02X\n","this is a test :",123,10));
this is a test : 123 0x0A
格式化字符串:
function OnDraw(handle)
{
????local b = format("當(dāng)班產(chǎn)量:%d",Yx(1093));
????SetText(handle,b);
}
abs(x)
以整數(shù)形式返回x的絕對(duì)值
acos(x)
返回x的反余弦值
asin(x)
返回x的反正弦值
atan(x)
返回x的反正切值
atan2(x,?y)
返回x / y的反正切值
ceil(x)
返回一個(gè)浮點(diǎn)值,表示大于或等于x的最小整數(shù)
cos(x)
返回x的余弦值
exp(x)
返回float參數(shù)x的指數(shù)值
fabs(x)
返回x作為float的絕對(duì)值
floor(x)
返回一個(gè)浮點(diǎn)值,表示小于或等于x的最大整數(shù)
log(x)
返回x的自然對(duì)數(shù)
log10(x)
回x的對(duì)數(shù)基數(shù)-10
pow(x,?y)
將x提升到y(tǒng)的冪
rand()
返回0到RAND_MAX范圍內(nèi)的偽隨機(jī)整數(shù)
sin(x)
返回x的正弦值
sqrt(x)
返回x的平方根
srand(seed)
設(shè)置生成一系列偽隨機(jī)整數(shù)的起點(diǎn)
tan(x)
返回x的正切值
RAND_MAX
rand()函數(shù)可以返回的最大值
PI
數(shù)值常數(shù)pi(3.141592)是圓周長(zhǎng)與直徑之比
clock()
返回一個(gè)浮點(diǎn)數(shù),表示自進(jìn)程啟動(dòng)以來(lái)經(jīng)過(guò)的秒數(shù)
date([time[,?format]])
返回一個(gè)表,其中包含在槽中拆分的日期/時(shí)間:
sec | 秒(0 - 59). |
min | 分鐘?(0 - 59). |
hour | 小時(shí)(0 - 23). |
day | 日?(1 - 31). |
month | 月?(0 - 11; 一月= 0). |
year | 年 (當(dāng)前年). |
wday | 星期 (0 - 6; 星期日 = 0). |
yday | 一年的天數(shù) (0 - 365; 1月1日 ?= 0). |
如果省略time,則使用當(dāng)前時(shí)間。
如果format是'l'本地時(shí)間 或 'u'UTC時(shí)間,如果省略則默認(rèn)為'l'(本地時(shí)間)。
getenv(varaname)
返回包含環(huán)境變量varname值的字符串
remove(path)
刪除path指定的文件
rename(oldname,?newname)
將oldname指定的文件或目錄重命名為newname指定的名稱(chēng)
system(cmd)
通過(guò)os命令解釋器執(zhí)行字符串cmd。
time()
返回自1970年1月1日午夜00:00:00起經(jīng)過(guò)的秒數(shù)。
這個(gè)函數(shù)的結(jié)果可以通過(guò)函數(shù)date()格式化
endswith(str,?cmp)
如果字符串str的結(jié)尾與字符串cmp匹配則返回true,否則返回false
ecape(str)
在需要轉(zhuǎn)義的字符(”,a,b,t,n,v,f,r,\,”,’,0,xnn).之前添加反斜線(xiàn)返回
format(formatstr,?...)
返回根據(jù)formatstr格式化的字符串以及其后的可選參數(shù)。 格式字符串遵循與標(biāo)準(zhǔn)C函數(shù)的printf系列相同的規(guī)則(不支持“*”)。
sq> print(format("%s %d 0x%02X\n","this is a test :",123,10));
this is a test : 123 0x0A
strip(str)
刪首空,并返回刪除后字符串。
rstrip(str)
刪尾空,并返回刪除后字符串。
split(str,?separtators)
返回在str中出現(xiàn)分隔符的每個(gè)點(diǎn)處拆分的字符串?dāng)?shù)組。 分隔符不會(huì)作為任何數(shù)組元素的一部分返回。 參數(shù)分隔符是一個(gè)字符串,用于指定要用于拆分的字符。
local a = split("1.2-3;4/5",".-/;");
// 返回將是 [1,2,3,4,5]
startswith(str,?cmp)
如果字符串str的開(kāi)頭與字符串cmp匹配則返回true,否則返回false
strip(str)
刪首尾空,并返回刪除后字符串。