Lua 學習_3 函數 及 函數庫

                                     Lua 函數  及 函數庫


函數定義:

-- 函數定義  
add = function ( a,b)
    return a + b
end

--局部函數
local add1 = function ( a,b)
    return a + b
end

-- 函數 語法糖
function subtract( a,b )
    return a - b
end

print("add(1,2)",      add(1,2))
print("subtract(1,2)", subtract(1,2))

高階函數 :

  •    第一類     first class; 可以把  函數作爲 參數 進行傳遞
--局部函數
local add1 = function ( a,b)
    return a + b
end

function process(f,a,b) 
    print("f:",f)
    print("a:",a)
    print("b:",b)

    print("f(a,b)", f(a,b))
end

process(add1, 8,9)

 

可變參數運算符:

-- 可變參數
function add(...)
    
    local sum = 0
    local arg = {...}
    
    for k,v in ipairs(arg) do
        sum = sum + v
    end
    
    return #arg, sum
end


print(add(1,2,3,4,5,6,7,8,9))

function average ( ... )
    local  count , sum, temp = add(...)
    return sum/count
end

print(average(1,2,3,4,5,6,7,8,9))

 

 

 

                                              Lua 的運算符


  •  #  求長度  (下標要連續的 整數纔可以 求出 真正的長度
a = {1,2,3,4,5,6,7,8,9,x=100, y =2000}

print(#a)  輸出的是 9 而實際的長度 應該是 11
  •  字符串的 ..  鏈接符  不推薦使用
 a = 'abc'
 b = 'def'
 
 c = a..b

 print(c)
 輸出 abcdef

 

 

邏輯運算符:

and    or    not     --- 短路求值     無三目運算符

print("1 and 3:",1 and 3)                  
print("false and b:",false and 3)
print("true and b:",true and 3)

-1 and 3:        3
-false and b:    false
-true and b:     3

 模擬 三目運算符:

 tag  =  (a  and   b)  or c                    --and 優先級大於 or

 

 邏輯運算符的優先級

 and  優先級 大於 or

 

運算符的  結合性

..   ^   右結合 , 其餘都是 左結合

 

位運算: lua  5.3 版本完全支持, 之前版本不支持

  • &   與運算
  • |     或運算
  • ~   異或運算  其他語言中 回事 ^
  • ~   非運算
  • >> 左移運算符
  • << 右移運算符

--位運算
--3 : 0000 0011
--5 : 0000 0101

a = 3  --0000 0011
b = 5  --0000 0101

print("a&b:",a&b)     --對應位上 必須兩個 都爲 1 纔是 1  
print("a|b:",a|b)     --對應位上 只要有一個  1  爲1 否則 爲 0
print("a~b:",a~b)     --對應位上 不同 則爲   1  否則 爲 0
print("~a:",  ~a)      --取反 
print("a^b:", a^b)    --a 的 b 次冪 
print("a<<2:",a<<2)   --向左移動一位 變大 移動一位相當於 乘 2 
print("a>>2:",a>>2)   --向左移動一位 變大 移動一位相當於 除 2 
print("b<<2:",b<<2)
print("b>>2:",b>>2)

 

 

 

 

                                                          lua 提供的  函數庫 


string 標準庫

a = "abs+\nDf"

print(string.upper(a))
print(string.lower(a))

b = [[
    弄是誰 ?
    弄在哪?

    吃了嗎

    long string

    我這裏有水
]]

print(b)


-- 語法糖 --三種寫法等價
print(string.len( a ))
print(a:len())  
print(a.len(a))


-- string.  正則表達式 正則匹配

 

table 標準庫

 a = {1,2,3,4,5,6}

for k,v in pairs(a)  do
    print("k:"..k,"v:"..v)
end

table.insert( a, 3, "666")

for k,v in pairs(a)  do
    print("k:"..k,"v:"..v)
end

table.remove( a,2 )
for k,v in pairs(a)  do
    print("k:"..k,"v:"..v)
end

print(table.concat(a,'_',2,5))

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章