iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0
Software Development

30天 Lua重拾筆記系列 第 5

【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")

freedom

語法糖

還可以更簡單的這樣寫:

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"}

awesome

應該加分號的時候

雖然你可以這樣子寫:

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語法限制不太多,但最好還是好好縮排。

Lua之所以能夠高效,我認為一部分歸功於其token代表的意義幾乎是唯一的,這使得解析器相對簡單。儘管如此,也定義了許多語法糖,甜到寫個簡單的DSL絕對沒問題。
lollipop


上一篇
【30天Lua重拾筆記04】基礎1: Hello, {Lua}!
下一篇
【30天Lua重拾筆記06】基礎1: 變數
系列文
30天 Lua重拾筆記36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言