• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Lua學習筆記之 Type and Values

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    lua是一種動態類型語言, 不用特別聲明變量以及指定類型, 首次賦值即為聲明. 說到此點, 我覺得動態語言的這種特點與匯編倒是蠻象的: 不管你是什么類型, 對于底層而言, 它代表的就是一內存地址, 而操作符代表的就是對這些地址及存在于這些地址里的量進行操作而

    lua是一種動態類型語言, 不用特別聲明變量以及指定類型, 首次賦值即為聲明. 說到此點, 我覺得動態語言的這種特點與匯編倒是蠻象的: 不管你是什么類型, 對于底層而言, 它代表的就是一內存地址, 而操作符代表的就是對這些地址及存在于這些地址里的量進行操作而已.  閑話少說,  繼續看pil, 今天的內容是: types and  values.

    筆記內容:

    1. lua提供了八種數據類型: nil, boolean, string, number, userdata, function, thread, table. 如果想看某個表達式是何種類型的, 可以使用type()函數, 它的返回值是string類型:
    > print(type(10.4*3))
    number
    > print(type(type(10.4*3)))
    string

    2. 一個變量, 可以被多次賦以任何類型的值. 相比之下, lua中使用函數指針時的簡單, 到了令人咋舌的程度: 再也不需要象c里那樣弄個指針傳來傳去的了, 比如: a = print , 而后就可以用a(3)來打印表達式的值了. 讓我覺得最爽的一點就是: 使用table+函數賦值的方式, 可以非常容易的實現函數表, 從而避免出現大量的if else語句. 形如下:
    function func_1( para )
        para = para + 1
        return para
    end

    function func_2( para )
        para = para+2
        return para
    end

    func_table = {
        ["func1"] = func_1,
        ["func2"] = func_2,
    }

    print ( func_table["func1"](1) )

    打印的結果是:
    2

    選擇string作為 key, 是為了讓你了解在lua里, 作函數表是如何的方便.

    3. 全局變量在第一次賦值前, 默認是nil; 刪除全局變量, 也是將此變量賦值為nil.  nil值, 也常作為函數的無效返回值來使用.

    4. boolean類型有兩個值: false 和 true( 全為小寫 ). 在條件表達式中,  只有false和nil才表示假, 其余任何值均表示真(0也表示真).  比如這些值:
    if false then print( "ok" ) end
    if nil then print("ok") end
    if "" then print("ok") end
    if '' then print( "ok" ) end
    if "haha" then print( "ok") end
    if 0 then print("ok") end
    在上面的這些語句中, 只有前兩條語句打印不出ok, 其它皆可以.

    5. 對于number類型, lua只提供real實型數. 沒有整數類型, 按pil的說法: as it does not need it.... Moreover, most modern CPUs do floating-point arithmetic as fast as (or even faster than) integer arithmetic. 我想, lua自身的這些"狡辯"已經有足夠的說服力, 不用再羅索了. 什么叫自由? 看這里:
    >print( string.sub( "hello", 1.1, 2.2 ) )
    he
    其效果等同于: print( string.sub( "hello", 1, 2 ) )

    6. 都說lua的string類型功能很強大, 可就目前我的使用而言, 并沒有感受到這種強大給我帶來的更多的便利性, 我想, 可能還是碼lua碼得少了. lua里的string類型, 可以存放任意長的字符串, 一個字符串, 一旦創建便不可更改. 有人說, 這樣操作起來豈不是效率很低? 其實, 也不盡然, 你想嘛, 那些對串進行操作的函數: sub, find, copy, replace, cat等等. 其中, 很多確實本身并沒有要求一定要修改串本身, 很多函數都是不修改串的, 而同時, 修改串的那些操作, 還不如直接創建一個新串來得方便. lua對字符串的內存管理, 還是比較棒的, 編程者不用去管它的分配與回收, lua會根據自己的一套引用計數機制來自行決定何時釋放掉這個串, 同時, 正是由于不可修改串本身, 也使得lua的字符串操作變成了單純的引用操作, 這樣效率應該是更高了.

    字符串常量, 可以使用單引號, 也可以使用雙引號括起來.  但是, 要培養一種良好的編程習慣: 固定使用一種風格的聲明形式. 轉義字符, 一樣在前面加 "\" . 以\ 后引出的數字, 可以表示一個asc字符, 但\的數字最多不會超過3位.

    定義含有多行的字符串時, 可以使用 [[ ]] 標識, 這樣就不用在每行之間加\n作轉義了.

    lua 提供字符串與number類型之間的自動轉換功能. 所謂的自動轉換, 就是視調用時的函數行為, 決定當前的操作是按字符串處理, 還是按數值型處理,  比如:  "10"+1,  這種情況會按數字處理, 因為字符 串沒有加法操作, 如果想連接兩個字符串, 要用 .. 運算符. 而 "10"..1, 其結果為: 101 .  當然,  "a"+1這樣的操作, 是非法的,  因為lua的轉換, 并不是按asi來作, 而是等于執行了一個 atoi( "10"), 然后再加1.
    在其它場合, 如果要將字符串轉為數字, 使用tonumber, 轉換失敗時, 返回nil. 比如: tonumber("a")返回值就為nil. 如果要將數字轉換成字符串, 有兩種方法: 一種是使用tostring函數, 一種是使用連接符將數字和一個空串連接起來: 10.."", 其結果為:"10"

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>