<code>-- mac 上有很多文本編輯器,Himi找了很多,感覺TextMate是比較好用的,小巧且功能強大!而且免費,圖示是個小菊花 - -</code>
<code>-- 注釋語句</code>
<code>--[[ </code>
<code>注釋段落語句</code>
<code> </code><code>]]</code><code>--</code>
<code>--引用其他lua檔案,不需要加上(.lua)字尾</code>
<code>--require "xx"</code>
<code>--變量不需要定義,可以直接指派</code>
<code>count</code><code>=</code> <code>100</code> <code>--成員變量</code>
<code>local</code> <code>count</code><code>=</code><code>100</code> <code>--局部變量</code>
<code>--方法定義</code>
<code>function hello</code><code>(</code><code>...</code><code>)</code>
<code> </code><code>--列印</code>
<code> </code><code>print</code><code>(</code><code>"Hello Lua!"</code><code>)</code><code>;</code>
<code> </code><code>print</code><code>(</code><code>string</code><code>.format</code><code>(</code><code>...</code><code>)</code><code>)</code>
<code>end</code>
<code>-- 每一行代碼不需要使用分隔符,當然也可以加上</code>
<code>-- 通路沒有初始化的變量,lua預設傳回nil</code>
<code>-- 調用函數形式</code>
<code>hello</code><code>(</code><code>"你懂的"</code><code>)</code>
<code>--列印變量的類型</code>
<code>isOK</code><code>=</code><code>false</code>
<code>print</code><code>(</code><code>type</code><code>(</code><code>isOK</code><code>)</code><code>)</code>
<code>-- 基本變量類型</code>
<code>a</code><code>=</code><code>nil</code><code>--Lua 中值為nil 相當于删除</code>
<code>b</code><code>=</code><code>10</code>
<code>c</code><code>=</code><code>10.4</code>
<code>d</code><code>=</code><code>false</code>
<code>--定義字元串,單引号,雙引号都可以的</code>
<code>e</code><code>=</code><code>"i am"</code>
<code>d</code><code>=</code><code>'himi'</code>
<code>--兩個字元串的連接配接可以如下形式</code>
<code>stringA</code><code>=</code><code>"Hi"</code>
<code>stringB</code><code>=</code><code>"mi"</code>
<code>print</code><code>(</code><code>stringA..stringB</code><code>)</code>
<code>--另外Lua也支援轉移字元,如下</code>
<code>print</code><code>(</code><code>stringA..</code><code>"\n"</code><code>..stringB</code><code>)</code><code>;</code>
<code>--修改字元串的部分gsub,可以如下形式:(将stringA字元串中的Hi修改為WT)</code>
<code>stringA</code><code>=</code><code>string</code><code>.gsub</code><code>(</code><code>stringA</code><code>,</code><code>"Hi"</code><code>,</code><code>"WT"</code><code>)</code>
<code>print</code><code>(</code><code>stringA</code><code>)</code><code>;</code>
<code>--将字元換成數字tonumber(不轉也會自動轉)</code>
<code>--将數字換成字元tostring(不轉也會自動轉)</code>
<code>stringC</code><code>=</code> <code>"100"</code>
<code>stringC</code><code>=</code> <code>tonumber</code><code>(</code><code>stringC</code><code>)</code>
<code>stringC</code><code>=</code> <code>stringC</code><code>+</code><code>20</code>
<code>stringC</code><code>=</code> <code>tostring</code><code>(</code><code>stringC</code><code>)</code>
<code>print</code><code>(</code><code>stringC</code><code>)</code>
<code>--取一個字元串的長度使用 #</code>
<code>print</code><code>(</code><code>#stringC)</code>
<code>--建立 表</code>
<code>tableA</code><code>=</code><code>{</code><code>}</code>
<code>m</code><code>=</code> <code>"x"</code>
<code>tableA[m]</code><code>=</code><code>100</code>
<code>m</code><code>2</code> <code>=</code><code>'y'</code>
<code>tableA[m</code><code>2</code><code>]</code><code>=</code><code>200</code>
<code>print</code><code>(</code><code>tableA[</code><code>"x"</code><code>]..</code><code>"\n"</code><code>..tableA.y</code><code>)</code>
<code>--另外表還可以如下形式(從1開始)</code>
<code>tableB</code><code>=</code><code>{</code><code>"4"</code><code>,</code><code>"5"</code><code>,</code><code>"6"</code><code>,</code><code>"7"</code><code>,</code><code>"8"</code><code>}</code>
<code>print</code><code>(</code><code>tableB[</code><code>1</code><code>]</code><code>)</code>
<code>--算術操作符</code>
<code>c</code><code>1</code> <code>=</code> <code>10</code><code>+</code><code>2</code>
<code>c</code><code>2</code> <code>=</code> <code>10</code><code>-2</code>
<code>c</code><code>3</code> <code>=</code> <code>10</code><code>*</code><code>2</code>
<code>c</code><code>4</code> <code>=</code> <code>10</code><code>/</code><code>2</code>
<code>c</code><code>5</code> <code>=</code> <code>10</code><code>^</code><code>2</code>
<code>c</code><code>6</code> <code>=</code> <code>10</code><code>%</code><code>2</code>
<code>c</code><code>7</code> <code>=</code> <code>-10</code><code>+</code><code>2</code>
<code>print</code><code>(</code><code>c</code><code>1.</code><code>.</code><code>"_"</code><code>..c</code><code>2.</code><code>.</code><code>"_"</code><code>..c</code><code>3.</code><code>.</code><code>"_"</code><code>..c</code><code>4.</code><code>.</code><code>"_"</code><code>..c</code><code>5.</code><code>.</code><code>"_"</code><code>..c</code><code>6.</code><code>.</code><code>"_"</code><code>..c</code><code>7</code><code>)</code>
<code>--控制操作</code>
<code>--if then elseif then else end</code>
<code>abc</code><code>=</code><code>10</code>
<code>if</code> <code>abc</code><code>=</code><code>=</code><code>10</code> <code>then</code>
<code> </code><code>print</code><code>(</code><code>"v1"</code><code>)</code>
<code>elseif abc</code><code>=</code><code>=</code> <code>9</code> <code>then</code>
<code> </code><code>print</code><code>(</code><code>"v2"</code><code>)</code>
<code>else</code>
<code> </code><code>print</code><code>(</code><code>"v3"</code><code>)</code>
<code>--for</code>
<code>--從4(第一個參數)漲到10(第二個參數),每次增長以2(第三個參數)為機關</code>
<code>for</code> <code>i</code><code>=</code><code>4</code><code>,</code><code>10</code><code>,</code><code>2</code> <code>do</code>
<code> </code><code>print</code><code>(</code><code>"for1:"</code><code>..i</code><code>+</code><code>1</code><code>)</code>
<code>--也可以不制定最後一個參數,預設1的增長速度</code>
<code>for</code> <code>i</code><code>=</code><code>4</code><code>,</code><code>10</code> <code>do</code>
<code> </code><code>print</code><code>(</code><code>"for2:"</code><code>..i</code><code>+</code><code>1</code><code>)</code>
<code>tableFor</code><code>=</code> <code>{</code><code>"himi1"</code><code>,</code><code>"himi2"</code><code>,</code><code>"himi3"</code><code>,</code><code>"himi4"</code><code>,</code><code>"himi5"</code><code>}</code>
<code>for</code> <code>k</code><code>,</code><code>v</code><code>in</code> <code>pairs</code><code>(</code><code>tableFor</code><code>)</code> <code>do</code>
<code> </code><code>print</code><code>(</code><code>"for3:key:"</code><code>..k..</code><code>"value:"</code><code>..v</code><code>)</code>
<code>--while</code>
<code>w</code><code>1</code> <code>=</code> <code>20</code>
<code>while</code><code>true</code> <code>do</code>
<code> </code><code>w</code><code>1</code><code>=</code><code>w</code><code>1</code><code>+</code><code>1</code>
<code> </code><code>if</code> <code>w</code><code>1</code> <code>=</code><code>=</code><code>25</code> <code>then</code>
<code> </code><code>break</code>
<code> </code><code>end</code>
<code>print</code><code>(</code><code>"whlile:"</code><code>..w</code><code>1</code><code>)</code>
<code>--repeat</code>
<code> </code><code>aa</code><code>=</code><code>20</code>
<code> </code><code>repeat</code> <code>aa</code><code>=</code> <code>aa</code><code>+</code><code>2</code>
<code> </code><code>print</code><code>(</code><code>"repeat:"</code><code>..aa</code><code>)</code>
<code> </code><code>until aa</code><code>></code><code>28</code>
<code>--關系操作符</code>
<code>--需要注意的是不等于符号 ~= 而不是!=</code>
<code>ax</code><code>=</code><code>10</code>
<code>bx</code><code>=</code><code>20</code>
<code>if</code> <code>ax</code><code>></code><code>bx</code><code>then</code>
<code> </code><code>print</code><code>(</code><code>"GX1"</code><code>)</code>
<code>elseif ax</code><code><</code><code>bx</code><code>then</code>
<code> </code><code>print</code><code>(</code><code>"GX2"</code><code>)</code>
<code>elseif ax</code><code>></code><code>=</code><code>bx</code><code>then</code>
<code> </code><code>print</code><code>(</code><code>"GX3"</code><code>)</code>
<code>elseif ax</code><code><</code><code>=</code><code>bx</code><code>then</code>
<code> </code><code>print</code><code>(</code><code>"GX4"</code><code>)</code>
<code>elseif ax</code><code>=</code><code>=</code><code>bx</code><code>then</code>
<code> </code><code>print</code><code>(</code><code>"GX5"</code><code>)</code>
<code>elseif ax~</code><code>=</code><code>bx</code><code>then</code>
<code> </code><code>print</code><code>(</code><code>"GX6"</code><code>)</code>
<code> </code><code>print</code><code>(</code><code>"GX7"</code><code>)</code>
關于函數
<code>--函數詳解</code>
<code>--有一個傳回值的函數</code>
<code>function funTestBackOne</code><code>(</code><code>aCount</code><code>)</code>
<code> </code><code>local</code> <code>aCount</code><code>=</code> <code>aCount</code><code>+</code><code>1</code>
<code> </code><code>return</code> <code>aCount</code>
<code>a</code><code>=</code><code>20</code>
<code>print</code><code>(</code><code>funTestBackOne</code><code>(</code><code>a</code><code>)</code><code>)</code>
<code>--有多個傳回值的函數</code>
<code>function funTestBackMore</code><code>(</code><code>)</code>
<code> </code><code>return</code> <code>2</code><code>,</code><code>3</code>
<code>a</code><code>,</code><code>b</code><code>=</code><code>funTestBackMore</code><code>(</code><code>)</code>
<code>print</code><code>(</code><code>a..</code><code>" and "</code><code>..b</code><code>)</code>
<code>--有變長參數的函數</code>
<code>function funTestUnKnow</code><code>(</code> <code>...</code><code>)</code>
<code> </code><code>print</code><code>(</code><code>...</code><code>)</code>
<code>funTestUnKnow</code><code>(</code><code>a</code><code>,</code><code>b</code><code>,</code><code>"Himi"</code><code>)</code>
<code>--閉合函數(一個函數寫在另外一個函數内)</code>
<code>function funTest</code><code>1</code><code>(</code> <code>...</code><code>)</code>
<code> </code><code>local</code> <code>d</code><code>=</code> <code>12</code><code>;</code>
<code> </code><code>d</code><code>=</code><code>d</code><code>+</code><code>...</code>
<code> </code><code>function funTest</code><code>2</code><code>(</code> <code>...</code><code>)</code>
<code> </code><code>print</code><code>(</code><code>d</code><code>)</code>
<code> </code><code>funTest</code><code>2</code><code>(</code><code>)</code>
<code>funTest</code><code>1</code><code>(</code><code>100</code><code>)</code>
day1
--[[function fuc(n)
if n==0 then
return 1
else
return n*fuc(n-1)
end
print("input a number")
a = io.read("*number")
print(fuc(a))
--]]
--替換字元串
--[[
a = "one thing"
b = string.gsub(a,"one","two")
print(a)
print(b)
--轉換數字
line = io.read()
n = tonumber(line)
if n==nil then
error(line.."is not a valid number")
print(n*2)
--拼接字元串
print("10"+1)
print("hell".."o")
--轉換
print(n)
print("我是一個字元串"..tostring(n))
print("10"=="10")
print(tostring(10)=="10")
--#計算長度
a = "hello"
print(#a)
print(#"good\0byte")
]]--
--table的使用
a = {}
k = "x"
a[k] = 10
a[20] = "great"
print(a[k])
print(a[20])
k = 20
a["x"] =a["x"]+1
print(a["x"])
--使用同一個table
a["x"] = 10
b = a --a和b使用了同一個table
print(b["x"])
b["x"] = 20
a = nil --b還在用table
b = nil --沒人用table了
--自動增長
--建立1000個新條目
for i = 1,1000 do a[i] = i*2 end
print(a[9])
print(a["y"])
a.x = 20
print(a.x)
--循環存儲值
for i = 1,10
do a[i] = io.read() end
--輸入列印數組的值
for i = 1,#a do
print(a[i])
--輸出最後一個值
print(a[#a])
a[#a] = nil --删除最後一個值
a[#a + 1] = v --将v添加到清單的末尾
a[1000] = 10
a[10000] = 11
print(table.maxn(a))
i = 10;j = "10";k = "+10"
a[i] = "one value"
a[j] = "another value"
a[k] = "yet another value"
print(a[j])
print(a[tonumber(j)])
print(a[tonumber(k)])
--取小數點後面幾位
x = math.pi
print(x%0.1)
print(x - x%0.01)
local tolerance = 10
function isturnback(angle)
angle = angle%360
return (math.abs(angle-180)<tolerance)
print(isturnback(-180))
a = 10
b = "10"
if tostring(a)~=b then print("不等")
print("相等")
a.x = 1
a.y = 2
b = {}
b.x = 1
b.y = 2
c = a --a 等于 c table隻有兩個變量引用同一個的時候才是相等的
if a==b then print("a==b")
print("a~=b")
days = {"Sunday","Monday","Tuesday","Wednessday","Thursday","Friday","Saturday"}
print(days[1]) --這裡注意不是從0開始
--a={x = 10,y = 20} <=>a = {};a.x = 10;a.y = 20
w = {x = 0,y = 0, label = "console"}
x = {math.sin(0),math.sin(1),math.sin(2)}
w[1] = "anther field"
x.f = w
print(w["x"])
print(w[1])
print(x.f[1])
w.x = nil
list = nil
for line in io.lines() do
list = {next = list,value = line}
local l = list
while l do
print(l.value)
l = l.next
--error("inva operation")
--相當于do while
repeat
until line ~=""
print(line)
for i = 1,math.huge do --math.huge 無限大
print(1)
revDays = {["Sunday"] = 1,["Monday"] = 2,["Tuesday"] = 3,["Wednessday"] = 4,["Thursday"] = 5,["Friday"] = 6,["Saturday"] = 7}
x = "Tuesday"
--print(revDays[x])
table.sort(revDays)
revDays1 = {}
for k,v in pairs(revDays) do --給v指派“Sunday","Monday"... k指派1,2...
print(k)
print(v)
--數組排序
a = {1,3,2}
table.sort(a)
for i,v in pairs(a) do print(v) end
--print("Monday是第"..revDays1["Monday"].."天")
for key,value in ipairs(revDays1) do
print(revDays1[key])
a[1] = 10
a[2] = 20
a[3] = 30
day2
--函數
--數組求和
function sum(a)
local sum = 0
for i,v in pairs(a) do
sum = sum + v
return sum
a = {1,2,3,4,5,6}
num = sum(a)
print(num)
s,e = string.find("hello lua","lua")
print(s,e) --傳回函數的開始結束字元,從1開始
--傳回多個傳回值
function maximum(a)
local mi = 1
local m = a[mi]
for i,val in pairs(a) do
if val> m then
mi = i;m = val
return m,mi
function maxmum(a)
local num = 1
local val = a[num]
for i,value in pairs(a) do
if value>val then
num = i
val = value
return val,num
print(maxmum({8,10,23,12,5}))
t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
t[k]=v
for k, v in pairs(t) do
print(k,v)
print({if not package.loaded["111"] then print("nil") end}
day3
--面向對象
People = {} --定義一個p表
function clone(tab)
local t = {}
for key,value in pairs(tab) do
t[key] = value
return t
function People.sayhi()
print("Hello World")
end--]]
--[[People.sayhi = function()
print("Hello People ")
function People.new(name)
local self = clone(People)
self.name = name
return self
People.sayhi = function(self)
print("Hello People "..self.name)
--[[q = clone(People)
q.sayhi()--]]
local k = People.new("丁小未")
k.sayhi(k)
k:sayhi(k)
--k.sayhi()
--繼承
function copy(dist,tab)
dist[key] = value
Man = {}
Man.new = function(name)
local self = People.new(name)
copy(self,Man)
Man.sayHello = function()
print("Man say hello")
Man.sayhi = function(self)
print("hi "..self.name)
local m= Man.new("人")
m.sayhi(m)
m:sayHello()
--m:sayhi(m)
lua不支援函數重載
--可變參數
function show(...)
local num = select('#',...)
if num>0 then
print("恩")
print("無")
show()
--原表
local tbA = {a = 1}
local tbB = {b = 2}
tbA.y = function(tb, k) --必須要有傳回值
print("__index key:" .. k)
if k == 'a' then
return 10
return nil
local mt = {__index = tbA,
__newindex = function(t, k, v)
}
local mt = {__index = function(tb, k) --這個元方法用于讀取值
end,
__newindex = function(tb, k, v) --這個是用于設定值
print("__newindex key:" .. k)
]]
setmetatable(tbB, tbA)
tbB.a = 3
print(tbB.a)
--tbB.d = 3
--tbB.b = 5
--print(tbB.d)