-- boolean 類型只有兩個 true / false
-- Lua 把 false / nil 當作 false
-- 其他都為 true, 0 也是 true

if false or nil then
    print("至少有一个是 true")
else
    print("false 和 nil 都為 false")
end



if 0 then
    print("數字 0 是 true")
else
    print("數字 0 為 false")
end

-- String 三種表示法:雙引號, 單引號, 用2個方括號“[[ ]]”, “[ ]”。

-- 在對一個數字字符串上進行算術操作的時候,Lua會嘗試將這個數字字符串轉成一個數字:
print( '2' + 6 )  --8
print( '2' + '6' )  --8
print( '2 + 6' )  --2 + 6

print(-2e10)

print("------------")

local tbl = {"apple", "pear", "orange", "grape"}
for key, val in pairs(tbl) do
    print(key ..":"..val)
end

print("------------")

-- function 可以以匿名函數(anonymous function)的方式透過參數傳遞:

function testFun(tab,fun)
        for k ,v in pairs(tab) do
                print(fun(k,v));
        end
end


table_1 = {key1="val1",key2="val2"};
testFun(table_1,
function(key,val)--匿名函数
        return key.."="..val;
end
);



print("------------")

site = {}
site["key"] = "www.runoob.com"
print(site["key"])  --> www.runoob.com
print(site.key)     --> www.runoob.com


print("------------")

a = 100

--[ 檢查布爾條件 --]
if( a == 10 )
then
   print("a 的值為 10" )
elseif( a == 20 )
then  
   print("a 的值為 20" )
elseif( a == 30 )
then
   print("a 的值為 30" )
else
   --[ 以上條件語句没有一個為 true 時 print 以下信息 --]
   print("没有匹配 a 的值" )
end



print("--數值for循環--")


function f(x)  
    return x*2  
end

for i=1, f(5) do    --> f(5) = 10
    print(i) 
end

print("------------")

for i=10, 1, -1 do  
    print(i) 
end

print("--泛型for循環--")

-- i是數组索引值,v是對應索引的數组元素值。ipairs是Lua提供的一个迭代器函數,用来迭代數组。

days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}  
for i,v in ipairs(days) do  
    print(v) 
end  


print("------------")
a = 10
while (a < 20)
do
    print("a 的值為: ", a)
    a = a + 1
    if (a > 15) then
        break
    end
end    





local a = 1
::label:: print("--- goto label ---")

a = a+1
if a < 3 then
   goto label   -- a < 3 的时候跳轉到標籤 label
end

for i=1, 3 do
    if i <= 2 then
        print(i, "yes continue")
        goto continue
    end
    print(i, " no continue")
    ::continue::
    print([[i'm end]])
end

print("------------")

myprint = function(param)
   print("這是打印函數 -   ##",param,"##")
end

function add(num1, num2, functionPrint)
   result = num1 + num2
   -- 調用傳遞的函數参數
   functionPrint(result)
end

add(2, 5, myprint)


function f(...)
    a = select(3,...)    --> 從第三個位置開始,變量 a 對應右邊變量列表的第一個參數
    print(a)
    print(select(3,...)) --> 打印所有列表參數
end
f(0,1,2,3,4,5)


do  
    function foo(...)  
        for i = 1, select('#', ...) do  --> 獲取參數總數
            local arg = select(i, ...); --> 讀取參數,arg 對應的是右邊變量列表的第一個參數
            print("arg", arg);  
        end  
    end  
 
    foo(1, 2, 3, 4);  
end


-- string.gsub(mainString, findString, replaceString, num) 在字符串中替換。
-- mainString 為要操作的字符串, findString 為被替換的字符,replaceString 要替換的字符,num 替換次數(可以忽略,则全部替换)
res = string.gsub("aaaa","a","z",3)  
print(res)    --> zzza


-- string.find (str, substr, [init, [end]])
Begin, End = string.find("Hello Lua user", "Lua", 1) 
print(Begin, End)


-- string.reverse(arg) 字符串反轉
string.reverse("Lua")  --> auL


-- string.format(...) 返回一個類似printf的格式化字符串
print(string.format("the value is:%d",4))

-- string.len(arg) 計算字符串長度
print(string.len("abc"))




print(#"abc")

-- string.rep(string, n) 返回字符串string的n個拷貝
string.rep("abcd",2)    --> abcdabcd

for word in string.gmatch("Hello Lua user", "%a+") do 
    print(word)
end

print(string.match("I have 2 questions for you.", "%d+ %a+ %a+"))  --> 2 questions for
-- %d : 與任何數字配對
-- %a+ : 與任何字母配對



-- string.sub(s, i, j) 用於截取字符串

local sourcestr = "prefix--runoobgoogletaobao--suffix"
print("\n原始字符串", string.format("%q", sourcestr))

-- 截取部分,第4個到第15個
local first_sub = string.sub(sourcestr, 4, 15)
print("\n第一次截取", string.format("%q", first_sub))

-- 取字符串前缀,第1個到第8個
local second_sub = string.sub(sourcestr, 1, 8)
print("\n第二次截取", string.format("%q", second_sub))

-- 截取最後10個
local third_sub = string.sub(sourcestr, -10)
print("\n第三次截取", string.format("%q", third_sub))

-- 索引越界,輸出原始字符串
local fourth_sub = string.sub(sourcestr, -100)
print("\n第四次截取", string.format("%q", fourth_sub))

-- %q:接受一個字符串並將其轉化為可安全被Lua編輯器讀入的格式



print("------------")

array = {"Google", "Runoob", ["hello"]="world"}

for key,value in ipairs(array)
do
   print(key, value)
end

print("------------")

for k, v in pairs(array) do
    print(k, v)
end

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: