-- 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
To embed this program on your website, copy the following code and paste it into your website's HTML: