隨手扎
【30天Lua重拾筆記05】基礎1: 程式區塊(block、chunk)、排版
Lua的關鍵字
Lua的關鍵字並不多,就只有這麼幾個而已:
and | break | do | else | elseif | end |
false | for | function | goto | if | in |
local | nil | not | or | repeat | return |
then | true | until | while |
區塊(block)
有一些關鍵字會組合成程式區塊(block)。像是:
funciton
-end
do
-end
if-then
-end
while-do
-end
repeat
-until
夾於這些關鍵字中間的程式碼會成為一個環境區塊。
在區塊環境內,可以保有一些局部變數:
do
local name = "World"
print("Hello, "..name)
end
print(name)
Hello, World
nil
chunk
不過一個執行單位實際上是一個chunk。
load([[
do
local name = "World"
print("Hello, "..name)
end]])()
chunk也是block
chunk也是block,可以保有自己的局部變數。
load([[
local name = "World"
print("Hello, "..name)
]])()
print(name) --> nil
語句(statement)
區塊由多個語句組成。一個最簡單的空語句是;
儘管可以這樣寫:
io.write("Hello, ") ;io.write("World\n")
不過Lua會自動忽略空白、tab等。所以寫法相當自由:
io.write("Hello, ") io.write("World\n")
語法糖
還可以更簡單的這樣寫:
io.write "Hello, " io.write "World\n"
還記得最開始的Hello, World?
print "Hello, World"
關於糖果還有:
print("Hello, World")
print "Hello, World"
print 'Hello, World'
print [[Hello, World]]
print [==[Hello, World]==]
print {"Hello, Wolrd"}
應該加分號的時候
雖然你可以這樣子寫:
print
"Hello, World"
但是下面結果可能與你想的不同:
a = b + c
(print or io.write)('done')
這相當於
a = b + c(print or io.write)('done')
但你可能會想要
a = b + c;(print or io.write)('done')
所以最好:
a = b + c
;(print or io.write)('done')
整體而言,Lua語法限制不太多,但最好還是好好縮排。
LINE Pay贊助 信用卡小額贊助Lua之所以能夠高效,我認為一部分歸功於其token代表的意義幾乎是唯一的,這使得解析器相對簡單。儘管如此,也定義了許多語法糖,甜到寫個簡單的DSL絕對沒問題。
