• <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>

            Code Knight

            Programming is so cool
            隨筆 - 52, 文章 - 0, 評(píng)論 - 14, 引用 - 0
            數(shù)據(jù)加載中……

            LUA要點(diǎn)筆記<一>

            摘自《Programming in LUA》,著重選一些特點(diǎn)。PS:誰(shuí)能提供一本實(shí)例教程?
            全局變量不需要聲明,給一個(gè)變量賦值后即創(chuàng)建了這個(gè)全局變量,訪問(wèn)一個(gè)沒(méi)有初
            始化的全局變量也不會(huì)出錯(cuò),只不過(guò)得到的結(jié)果是:nil.

            -e:直接將命令傳入Lua
            prompt> lua -e "print(math.sin(12))"  --> -0.53657291800043
            -l:加載一個(gè)文件.
            -i:進(jìn)入交互模式.

            第2 章  類型和值
            Lua 是動(dòng)態(tài)類型語(yǔ)言,變量不要類型定義。Lua 中有8 個(gè)基本類型分別為:nil、boolean、
            number、string、userdata、function、thread 和table。函數(shù)type 可以測(cè)試給定變量或者值
            的類型。

            兩個(gè)取值false 和true。但要注意Lua 中所有的值都可以作為條件。在控制結(jié)構(gòu)的條
            件中除了false 和nil 為假,其他值都為真。所以Lua 認(rèn)為0 和空串都是真。

            第3 章  表達(dá)式

            a and b      -- 如果a為false,則返回a,否則返回b
            a or  b       -- 如果a為true,則返回a,否則返回b

            一個(gè)很實(shí)用的技巧:如果x 為false 或者nil 則給x 賦初始值v
            x = x or v
            等價(jià)于
            if not x then
               x = v
            end
            and 的優(yōu)先級(jí)比or 高。

            not 的結(jié)果一直返回false 或者true
            print(not nil)         --> true


            邏輯運(yùn)算符認(rèn)為false 和nil 是假(false),其他為真,0 也是true.
            and 和or 的運(yùn)算結(jié)果不是true 和false,而是和它的兩個(gè)操作數(shù)相關(guān)。
            a and b      -- 如果a為false,則返回a,否則返回b
            a or  b       -- 如果a為true,則返回a,否則返回b
            例如:
            print(4 and 5)         --> 5
            print(nil and 13)       --> nil
            print(false and 13)     --> false
            print(4 or 5)          --> 4
            print(false or 5)       --> 5
            一個(gè)很實(shí)用的技巧:如果x 為false 或者nil 則給x 賦初始值v
            x = x or v
            等價(jià)于
            if not x then
               x = v
            end
            and 的優(yōu)先級(jí)比or 高。
             
            C 語(yǔ)言中的三元運(yùn)算符
            a ? b : c
            在Lua 中可以這樣實(shí)現(xiàn):
            (a and b) or c
             
            not 的結(jié)果一直返回false 或者true
            print(not nil)         --> true
            print(not false)        --> true
            print(not 0)           --> false
            print(not not nil)      --> false

            連連接接運(yùn)運(yùn)算算符符 
            ..        --兩個(gè)點(diǎn)
            字符串連接,如果操作數(shù)為數(shù)字,Lua 將數(shù)字轉(zhuǎn)成字符串。
            print("Hello " .. "World")     --> Hello World
            print(0 .. 1)                --> 01

            w = {x=0, y=0, label="console"}
            x = {sin(0), sin(1), sin(2)}
            w[1] = "another field"
            x.f = w
            print(w["x"])    --> 0
            print(w[1])      --> another field
            print(x.f[1])    --> another field
            w.x = nil        -- remove field "x"


            在構(gòu)造函數(shù)中域分隔符逗號(hào)(",")可以用分號(hào)(";")替代,通常我們使用分號(hào)用來(lái)
            分割不同類型的表元素。
            {x=10, y=45; "one", "two", "three"}
            print(not false)        --> true
            print(not 0)           --> false
            print(not not nil)      --> false

            第4 章  基本語(yǔ)法
            Lua  可以對(duì)多個(gè)變量同時(shí)賦值,變量列表和值列表的各個(gè)元素用逗號(hào)分開(kāi),賦值語(yǔ)
            句右邊的值會(huì)依次賦給左邊的變量。
            a, b = 10, 2*x      <-->      a=10; b=2*x

            遇到賦值語(yǔ)句Lua 會(huì)先計(jì)算右邊所有的值然后再執(zhí)行賦值操作,所以我們可以這樣
            進(jìn)行交換變量的值:
            x, y = y, x                  -- swap 'x' for 'y'
            a[i], a[j] = a[j], a[i]        -- swap 'a[i]' for 'a[i]'

            當(dāng)變量個(gè)數(shù)和值的個(gè)數(shù)不一致時(shí),Lua 會(huì)一直以變量個(gè)數(shù)為基礎(chǔ)采取以下策略:
            a. 變量個(gè)數(shù)>值的個(gè)數(shù)          按變量個(gè)數(shù)補(bǔ)足nil
            b. 變量個(gè)數(shù)<值的個(gè)數(shù)          多余的值會(huì)被忽略
            例如:
            a, b, c = 0, 1 
            print(a,b,c)           --> 0   1   nil
             
            a, b = a+1, b+1, b+2    -- value of b+2 is ignored
            print(a,b)             --> 1   2
             
            a, b, c = 0
            print(a,b,c)           --> 0   nil   nil

            多值賦值經(jīng)常用來(lái)交換變量,或?qū)⒑瘮?shù)調(diào)用返回給變量:
            a, b = f()
            f()返回兩個(gè)值,第一個(gè)賦給a,第二個(gè)賦給b。

            我們給block 劃定一個(gè)明確的界限:do..end 內(nèi)的部分。

            控制結(jié)構(gòu)的條件表達(dá)式結(jié)果可以是任何值,Lua 認(rèn)為false 和nil 為假,其他值為真。

            repeat-until 語(yǔ)句:
            repeat
               statements;
            until conditions;

            有時(shí)候?yàn)榱苏{(diào)試或者其他目的需要在block 的中間使用return 或者break,可以顯式
            的使用do..end 來(lái)實(shí)現(xiàn):
            function foo ()
               return          --<< SYNTAX ERROR
               -- 'return' is the last statement in the next block
               do return end       -- OK
               ...             -- statements not reached
            end

            調(diào)用函數(shù)的時(shí)候,如果參數(shù)列表為空,必須使用()表明是函數(shù)調(diào)用。
            print(8*9, 9/8)
            a = math.sin(3) + math.cos(10)
            print(os.date())
            上述規(guī)則有一個(gè)例外,當(dāng)函數(shù)只有一個(gè)參數(shù)并且這個(gè)參數(shù)是字符串或者表構(gòu)造的時(shí)
            候,()是可選的:
            print "Hello World"     <-->      print("Hello World")
            dofile 'a.lua'         <-->      dofile ('a.lua')
            print [[a multi-line    <-->      print([[a multi-line
                     message]]                       message]])
            f{x=10, y=20}          <-->      f({x=10, y=20})
            type{}                <-->      type({})

            Lua 函數(shù)實(shí)參和形參的匹配與賦值語(yǔ)句類似,多余部分被忽略,缺少部分用nil 補(bǔ)足。
            function f(a, b) return a or b end
             
            CALL            PARAMETERS
             
            f(3)            a=3, b=nil
            f(3, 4)         a=3, b=4
            f(3, 4, 5)       a=3, b=4  (5 is discarded)

            Lua 函數(shù)中,在return 后列出要返回的值得列表即可返回多值,如:
            function maximum (a)
               local mi = 1           -- maximum index
               local m = a[mi]        -- maximum value
               for i,val in ipairs(a) do
                  if val > m then
                     mi = i
                     m = val
                  end
               end
               return m, mi
            end
             
            print(maximum({8,10,23,12,5}))     --> 23   3
            Lua  總是調(diào)整函數(shù)返回值的個(gè)數(shù)去適用調(diào)用環(huán)境,當(dāng)作為一個(gè)語(yǔ)句調(diào)用函數(shù)時(shí),所
            有返回值被忽略。假設(shè)有如下三個(gè)函數(shù):
            function foo0 () end                -- returns no results
            function foo1 () return 'a' end       -- returns 1 result
            function foo2 () return 'a','b' end   -- returns 2 results
            第一,當(dāng)作為表達(dá)式調(diào)用函數(shù)時(shí),有以下幾種情況:
            1.  當(dāng)調(diào)用作為表達(dá)式最后一個(gè)參數(shù)或者僅有一個(gè)參數(shù)時(shí),根據(jù)變量個(gè)數(shù)函數(shù)盡可能
            多地返回多個(gè)值,不足補(bǔ)nil,超出舍去。
            2.  其他情況下,函數(shù)調(diào)用僅返回第一個(gè)值(如果沒(méi)有返回值為nil)
            x,y = foo2()           -- x='a', y='b'
            x = foo2()             -- x='a', 'b' is discarded
            x,y,z = 10,foo2()       -- x=10, y='a', z='b'
             
            x,y = foo0()           -- x=nil, y=nil
            x,y = foo1()           -- x='a', y=nil
            x,y,z = foo2()         -- x='a', y='b', z=nil
            x,y = foo2(), 20        -- x='a', y=20
            x,y = foo0(), 20, 30    -- x='nil', y=20, 30 is discarded
            第二,函數(shù)調(diào)用作為函數(shù)參數(shù)被調(diào)用時(shí),和多值賦值是相同。
            print(foo0())          -->
            print(foo1())          --> a
            print(foo2())          --> a   b
            print(foo2(), 1)        --> a   1
            print(foo2() .. "x")    --> ax
            第三,函數(shù)調(diào)用在表構(gòu)造函數(shù)中初始化時(shí),和多值賦值時(shí)相同。
            a = {foo0()}           -- a = {}    (an empty table)
            a = {foo1()}           -- a = {'a'}
            a = {foo2()}           -- a = {'a', 'b'}
             
            a = {foo0(), foo2(), 4}  -- a[1] = nil, a[2] = 'a', a[3] = 4
            另外,return f()這種類型的返回f()返回的所有值
            function foo (i)
               if i == 0 then return foo0()
               elseif i == 1 then return foo1()
               elseif i == 2 then return foo2()
               end
            end
             
            print(foo(1))       --> a
            print(foo(2))       --> a  b
            print(foo(0))       -- (no results)
            print(foo(3))       -- (no results)
            可以使用圓括號(hào)強(qiáng)制使調(diào)用返回一個(gè)值。
            print((foo0()))     --> nil
            print((foo1()))     --> a
            print((foo2()))     --> a

            posted on 2009-02-26 16:15 Code Knight 閱讀(893) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 腳本

            日本久久久久久久久久| 久久久久国产一区二区| 国产精品久久成人影院| 久久国产精品成人免费| 久久99国产精品一区二区| 色婷婷久久综合中文久久一本| 国内精品久久国产| 超级碰碰碰碰97久久久久| 久久成人国产精品一区二区| 国产一区二区精品久久岳| 国产精品美女久久久网AV| 国内精品久久久久久久coent| 亚洲国产小视频精品久久久三级| 久久久久高潮毛片免费全部播放 | 久久久久免费视频| 亚洲va中文字幕无码久久不卡| 久久久精品午夜免费不卡| 亚洲AV无码久久精品成人| 亚洲中文字幕伊人久久无码| 国产亚洲婷婷香蕉久久精品| 亚洲人成伊人成综合网久久久| 久久精品成人一区二区三区| 亚洲国产天堂久久综合网站| 久久久久99精品成人片欧美| 久久综合久久美利坚合众国| 人妻丰满?V无码久久不卡| 91久久精品国产91性色也| 国产精品久久久久久久久免费| 久久亚洲私人国产精品| 国色天香久久久久久久小说| 久久人妻AV中文字幕| 伊人久久亚洲综合影院| 国产精品久久久久久久久久影院 | 久久夜色精品国产噜噜亚洲AV| 2019久久久高清456| 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 久久久久无码中| 亚洲精品成人久久久| 久久久无码精品亚洲日韩京东传媒 | 国产精品日韩深夜福利久久| 国产巨作麻豆欧美亚洲综合久久|