• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            每天早晨叫醒你的不是鬧鐘,而是夢想

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              62 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(1)

            我參與的團(tuán)隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            一、表達(dá)式:

                1. 算術(shù)操作符:
                Lua支持常規(guī)算術(shù)操作符有:二元的“+”、“-”、“*”、“/”、“^”(指數(shù))、“%”(取模),一元的“-”(負(fù)號)。所有這些操作符都可用于實(shí)數(shù)。然而需要特別說明的是取模操作符(%),Lua中對該操作符的定義為:
                a % b == a - floor(a / b) * b
                由此可以推演出x % 1的結(jié)果為x的小數(shù)部分,而x - x % 1的結(jié)果則為x的整數(shù)部分。類似的,x - x % 0.01則是x精確到小數(shù)點(diǎn)后兩位的結(jié)果。
                
                2. 關(guān)系操作符:
                Lua支持的關(guān)系操作符有:>、<、>=、<=、==、~=,所有這些操作符的結(jié)果均為true或false。
                操作符==用于相等性測試,操作符~=用于不等性測試。這兩個操作符可以應(yīng)用于任意兩個值。如果兩個值的類型不同,Lua就認(rèn)為他們不等。nil值與其自身相等。對于table、userdata和函數(shù),Lua是通過引用進(jìn)行比較的。也就是說,只有當(dāng)他們引用同一個對象時,才視為相等。如:

            復(fù)制代碼
            1 a = {}
            2 a.x = 1
            3 a.y = 0
            4 b = {}
            5 b.x = 1
            6 b.y = 1
            7 c = a
            復(fù)制代碼

                其結(jié)果是a == c,但a ~= b。
                對于字符串的比較,Lua是按照字符次序比較的。
                
                3. 邏輯操作符:
                Lua支持的邏輯操作符有:and、or和not。與條件控制語句一樣,所有的邏輯操作符都將false和nil視為假,其他的結(jié)果均為真。和其他大多數(shù)語言一樣,Lua中的and和or都使用“短路原則”。在Lua中有一種慣用寫法"x = x or v",它等價于:if not x then x = v end。這里還有一種基于“短路原則”的慣用寫法,如:
                max = (x > y) and x or y
                這等價于C語言中max = (x > y) ? x : y。由于x和y均為數(shù)值,因此它們的結(jié)果將始終為true。
                
                4. 字符串連接:
                前一篇Blog已經(jīng)提到了字符串連接操作符(..),這里再給出一些簡單的示例。
                /> lua
                > print("Hello " .. "World)
                Hello World
                > print(0 .. 1)  --即使連接操作符的操作數(shù)為數(shù)值類型,在執(zhí)行時Lua仍會將其自動轉(zhuǎn)換為字符串。
                01

                5. table構(gòu)造器:
                構(gòu)造器用于構(gòu)建和初始化table的表達(dá)式。這是Lua特有的表達(dá)式,也是Lua中最有用、最通用的機(jī)制之一。其中最簡單的構(gòu)造器是空構(gòu)造器{},用于創(chuàng)建空table。我們通過構(gòu)造器還可以初始化數(shù)組,如:

            復(fù)制代碼
             1 days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
            2 for i = 1,#days do
            3 print(days[i])
            4 end
            5 --輸出結(jié)果為
            6 --Sunday
            7 --Monday
            8 --Tuesday
            9 --Wednesday
            10 --Thursday
            11 --Friday
            12 --Saturday
            復(fù)制代碼

                從輸出結(jié)果可以看出,days在構(gòu)造后會將自動初始化,其中days[1]被初始化為"Sunday",days[2]為"Monday",以此類推。
                Lua中還提供了另外一種特殊的語法用于初始化記錄風(fēng)格的table。如:a = { x = 10, y = 20 },其等價于:a = {}; a.x = 10; a.y = 20
                在實(shí)際編程時我們也可以將這兩種初始化方式組合在一起使用,如:

            復(fù)制代碼
            polyline = {color = "blue", thickness = 2, npoints = 4, 
            {x = 0, y = 0},
            {x = 10, y = 0},
            {x = -10, y = 1},
            {x = 0, y = 1} }
            print(polyline["color"]);
            print(polyline[2].x)
            print(polyline[4].y)
            --輸出結(jié)果如下:
            --
            blue
            --
            10
            --
            1
            復(fù)制代碼

                除了以上兩種構(gòu)造初始化方式之外,Lua還提供另外一種更為通用的方式,如:

            1 opnames = { ["+"] = "add", ["-"] = "sub", ["*"] = "mul", ["/"] = "div"}
            2 print(opnames["+"])
            3 i = 20; s = "-"
            4 a = { [i + 0] = s, [i + 1] = s .. s, [i + 2] = s..s..s }
            5 print(a[22])

                對于table的構(gòu)造器,還有兩個需要了解的語法規(guī)則,如:
                a = { [1] = "red", [2] = "green", [3] = "blue", }  
                這里需要注意最后一個元素的后面仍然可以保留逗號(,),這一點(diǎn)類似于C語言中的枚舉。
                a = {x = 10, y = 45; "one", "two", "three" }
                可以看到上面的聲明中同時存在逗號(,)和分號(;)兩種元素分隔符,這種寫法在Lua中是允許的。我們通常會將分號(;)用于分隔不同初始化類型的元素,如上例中分號之前的初始化方式為記錄初始化方式,而后面則是數(shù)組初始化方式。

            二、語句:

                1. 賦值語句:
                Lua中的賦值語句和其它編程語言基本相同,唯一的差別是Lua支持“多重賦值”,如:a, b = 10, 2 * x,其等價于a = 10; b = 2 * x。然而需要說明的是,Lua在賦值之前需要先計算等號右邊的表達(dá)式,在每一個表達(dá)式都得到結(jié)果之后再進(jìn)行賦值。因此,我們可以這樣寫變量交互:x,y = y,x。如果等號右側(cè)的表達(dá)式數(shù)量少于左側(cè)變量的數(shù)量,Lua會將左側(cè)多出的變量的值置為nil,如果相反,Lua將忽略右側(cè)多出的表達(dá)式。

                2. 局部變量與塊:
                Lua中的局部變量定義語法為:local i = 1,其中l(wèi)ocal關(guān)鍵字表示該變量為局部變量。和全局變量不同的是,局部變量的作用范圍僅限于其所在的程序塊。Lua中的程序可以為控制結(jié)構(gòu)的執(zhí)行體、函數(shù)執(zhí)行體或者是一個程序塊,如:
                下面的x變量僅在while循環(huán)內(nèi)有效。

            1 while i <= x do
            2 local x = i * 2
            3 print(x)
            4 i = i + 1
            5 end

                如果是在交互模式下,當(dāng)執(zhí)行l(wèi)ocal x = 0之后,該變量x所在的程序即以結(jié)束,后面的Lua語句將被視為新的程序塊。如果想避免此類問題,我們可以顯式的聲明程序塊,這樣即便是在交互模式下,局部變量仍然能保持其塊內(nèi)有效性,如:

            1 do
            2 local a2 = 2 * a
            3 local d = (b ^ 2 - 4 * a) ^ (1 / 2)
            4 x1 = (-b + d) / a2
            5 x2 = (-b - d) / a2
            6 end --a2和d的作用域至此結(jié)束。

                和其它編程語言一樣,如果有可能盡量使用局部變量,以免造成全局環(huán)境的變量名污染。同時由于局部變量的有效期更短,這樣垃圾收集器可以及時對其進(jìn)行清理,從而得到更多的可用內(nèi)存。    

                3. 控制結(jié)構(gòu):
                Lua中提供的控制語句和其它大多數(shù)開發(fā)語言所提供的基本相同,因此這里僅僅是進(jìn)行簡單的列舉。然后再給出差異部分的詳細(xì)介紹。如:
                1). if then else
                if a < 0 then 
                    b = 0
                else
                    b = 1
                end
                
                2). if elseif else then
                if a < 0 then 
                    b = 0
                elseif a == 0 then
                    b = 1
                else
                    b = 2
                end
                
                3). while
                local i= 1
                while a[i] do
                    print(a[i])
                    i = i + 1
                end
                
                4). repeat
                repeat
                    line = io.read()
                until line ~= "" --直到until的條件為真時結(jié)束。
                print(line)
                
                5). for
                for var = begin, end, step do --如果沒有step變量,begin的缺省步長為1。
                    i = i + 1
                end
                需要說明的是,for循環(huán)開始處的三個變量begin、end和step,如果它們使表達(dá)式的返回值,那么該表達(dá)式將僅執(zhí)行一次。再有就是不要在for的循環(huán)體內(nèi)修改變量var的值,否則會導(dǎo)致不可預(yù)知的結(jié)果。
                
                6). foreach
                for i, v in ipairs(a) do  --ipairs是Lua自帶的系統(tǒng)函數(shù),返回遍歷數(shù)組的迭代器。
                    print(v)
                end
                
                for k in pairs(t) do      --打印table t中的所有key。
                    print(k)
                end
                見如下示例代碼:

            復(fù)制代碼
             1 days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }
            2 revDays = {}
            3 for k, v in ipairs(days) do
            4 revDays[v] = k
            5 end
            6
            7 for k in pairs(revDays) do
            8 print(k .. " = " .. revDays[k])
            9 end
            10
            11 --輸出結(jié)果為:
            12 --Saturday = 7
            13 --Tuesday = 3
            14 --Wednesday = 4
            15 --Friday = 6
            16 --Sunday = 1
            17 --Thursday = 5
            18 --Monday = 2
            復(fù)制代碼

                7). break
                和C語言中的break語義完全相同,即跳出最內(nèi)層循環(huán)。

            posted on 2014-02-17 17:35 沛沛 閱讀(219) 評論(0)  編輯 收藏 引用 所屬分類: Script
            婷婷久久五月天| 久久996热精品xxxx| 2021国产精品久久精品| 亚洲av伊人久久综合密臀性色| 久久婷婷五月综合色奶水99啪| 亚洲国产精品久久久久婷婷老年| 思思久久99热免费精品6| 日本欧美久久久久免费播放网| 亚洲伊人久久大香线蕉苏妲己| 亚洲日本va午夜中文字幕久久 | 久久精品夜色噜噜亚洲A∨| 欧美久久久久久精选9999| 久久夜色精品国产噜噜亚洲AV| 精品久久久久久国产三级| 久久精品a亚洲国产v高清不卡| 天天影视色香欲综合久久| 久久777国产线看观看精品| 狠狠色噜噜色狠狠狠综合久久 | 狠狠色综合网站久久久久久久 | 久久国产影院| 国产一区二区精品久久| 国产aⅴ激情无码久久| 久久亚洲高清综合| 狠狠人妻久久久久久综合蜜桃 | 欧美粉嫩小泬久久久久久久| 99久久精品无码一区二区毛片| 亚洲中文字幕无码久久2017| 无夜精品久久久久久| 人妻少妇精品久久| 99久久精品无码一区二区毛片| 欧美久久精品一级c片片| 99麻豆久久久国产精品免费| 国产精品美女久久久久| 91精品国产综合久久婷婷| 国产精品免费福利久久| 国产精品一区二区久久| 国产精品99久久久久久人| 久久国产精品99久久久久久老狼| 久久伊人精品青青草原高清| 99久久精品免费观看国产| 国产午夜精品理论片久久|