第1章 起點

2021-04-15 18:56:48 字數 4334 閱讀 7355

1章起點

寫乙個最最簡單的程式——

hello world。

print("hello world")

假定你把上面這句儲存在

hello.lua

檔案中,你在命令列只需要:

prompt> lua hello.lua

看到結果了嗎?

讓我們來看乙個稍微複雜點的例子:

-- defines a factorial function

function fact (n)

if n == 0 then

return 1

else

return n * fact(n-1)

endend

print("enter a number:")

a = io.read("*number")      -- read a number

print(fact(a))

這個例子定義了乙個函式,計算輸入引數

n的階乘;本例要求使用者輸入乙個數字

n,然後列印

n的階乘。

1.1 chunks

chunk

是一系列語句,

lua執行的每一塊語句,比如乙個檔案或者互動模式下的每一行都是乙個

chunk。

每個語句結尾的分號(

;)是可選的,但如果同一行有多個語句最好用;分開

a = 1   b = a*2    -- ugly, but valid 乙個

chunk

可以是乙個語句,也可以是一系列語句的組合,還可以是函式,

chunk

可以很大,在

lua中幾個

mbyte

的chunk

是很常見的。

你還可以以互動模式執行

lua,不帶引數執行

lua:

你鍵入的每個命令(比如:

"hello world"

)在你鍵入回車之後立即被執行,鍵入檔案結束符可以退出互動模式(

ctrl-d in unix, ctrl-z in dos/windows

),或者呼叫

os庫的

os.exit()

函式也可以退出。

在互動模式下,

lua通常把每乙個行當作乙個

chunk

,但如果

lua一行不是乙個完整的

chunk

時,他會等待繼續輸入直到得到乙個完整的

chunk.

在lua

等待續行時,顯示不同的提示符(一般是

>>).

可以通過指定引數讓

lua執行一系列

chunk

。例如:假定乙個檔案

a內有單個語句

x=1;另乙個檔案

b有語句

print(x)

prompt> lua -la -lb

命令首先在乙個

chunk

內先執行

a然後執行

b。(注意:

-l選項會呼叫

require

,將會在指定的目錄下搜尋檔案,如果環境變數沒有設好,上面的命令可能不能正確執行。我們將在

8.1節詳細更詳細的討論

the require function)

-i選項要求

lua執行指定

chunk

後進入互動模式.

prompt> lua -i -la -lb

將在乙個

chunk

內先執行

a然後執行

b,最後直接進入互動模式。

另乙個連線外部

chunk

的方式是使用

dofile

函式,dofile

函式載入檔案並執行它

.假設有乙個檔案:

-- file 'lib1.lua'

function norm (x, y)

local n2 = x^2 + y^2

return math.sqrt(n2)

end

function twice (x)

return 2*x

end在互動模式下:

> dofile("lib1.lua")     -- load your library

> n = norm(3.4, 1.0)

> print(twice(n))        --> 7.0880180586677 -i

和dofile

在除錯或者測試

lua**時是很方便的。

1.2全域性變數

全域性變數不需要宣告,給乙個變數賦值後即建立了這個全域性變數,訪問乙個沒有初始化的全域性變數也不會出錯,只不過得到的結果是:

nil.

print(b)      --> nil

b = 10

print(b)      --> 10

如果你想刪除乙個全域性變數,只需要將變數負值為

nil

b = nil

print(b)      --> nil

這樣變數

b就好像從沒被使用過一樣

.換句話說

, 當且僅當乙個變數不等於

nil時,這個變數存在。

1.3詞法約定

標示符:字母

(letter)

或者下劃線開頭的字母、下劃線、數字序列

.最好不要使用下劃線加大寫字母的標示符,因為

lua的保留字也是這樣的。

lua中,

letter

的含義是依賴於本地環境的。

保留字:以下字元為

lua的保留字,不能當作識別符號。

and        break      do         else       elseif

end        false      for        function   if

in         local      nil        not        or

repeat     return     then       true       until

while

注意:lua是大小寫敏感的.

注釋:單行注釋

:--

多行注釋:

--[[    --]]

--[[

print(10)         -- no action (comment)

--]]

1.4命令列方式

lua [options] [script [args]] -e

:直接將命令傳入

lua

prompt> lua -e "print(math.sin(12))"   --> -0.53657291800043 -l

:載入乙個檔案.

-i:進入互動模式.

_prompt

內建變數作為互動模式的提示符

prompt> lua -i -e "_prompt=' lua> '"

lua>

lua的執行過程,在執行引數之前,

lua會查詢環境變數

lua_init

的值,如果變數存在並且值為

@filename

,lua

將載入指定檔案。如果變數存在但不是以

@開頭,

lua假定

filename

為lua

**檔案並且執行他。利用這個特性,我們可以通過配置,靈活的設定互動模式的環境。可以載入包,修改提示符和路徑,定義自己的函式,修改或者重新命名函式等。

全域性變數

arg存放

lua的命令列引數。

prompt> lua script a b c

在執行以前,

lua使用所有引數構造

arg表。指令碼名索引為

0,指令碼的引數從

1開始增加。指令碼前面的引數從

-1開始減少。

prompt> lua -e "sin=math.sin" script a b

arg表如下:

arg[-3] = "lua"

arg[-2] = "-e"

arg[-1] = "sin=math.sin"

arg[0] = "script"

arg[1] = "a"

arg[2] = "b"

第1章 導言

本章作為整個c語言學習的框架 1.1 入門 轉義字元 n只代表乙個字元。轉義字元為表示無法輸入的字元或不可見的字元提供一種通用可擴充的機制。t 製表符,b 回退符,雙引號,反斜槓符本身。要將它們列印出來,則在斜槓前再加 前加 1.2 變數與算術表示式 1 c語言中,所有變數都必須在函式起始處先宣告,...

第1章 簡介

桉樹企業版 ee 2.0是乙個基於linux體系架構,對企業資源 硬體 儲存 網路 統一管理的雲平台。桉樹雲是iaas層面的雲平台,對基礎裝置進行管理和擴充套件,為企業提供私有雲 可以部署在企業的防火牆之內,僅供企業內部使用,確保資料的安全性 和混合雲部署方案。桉樹在設計之初就考慮了易用性 模組化和...

第1章介紹

第1章介紹 儲存困難 傳輸困難 2.為什麼可以壓縮 3.資料壓縮分類 有失真壓縮 lossy 4.編解碼器 解碼器 decoder 編解碼器 codec 5.壓縮系統的組成 1 編碼器中的關鍵技術 2 編譯碼中的關鍵技術 6.編解碼器實現 數字訊號處理器dsp 軟體 編解碼器產品 編碼標準作用 高效...