青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Code Knight

Programming is so cool
隨筆 - 52, 文章 - 0, 評論 - 14, 引用 - 0
數據加載中……

LUA要點筆記<一>

摘自《Programming in LUA》,著重選一些特點。PS:誰能提供一本實例教程?
全局變量不需要聲明,給一個變量賦值后即創建了這個全局變量,訪問一個沒有初
始化的全局變量也不會出錯,只不過得到的結果是:nil.

-e:直接將命令傳入Lua
prompt> lua -e "print(math.sin(12))"  --> -0.53657291800043
-l:加載一個文件.
-i:進入交互模式.

第2 章  類型和值
Lua 是動態類型語言,變量不要類型定義。Lua 中有8 個基本類型分別為:nil、boolean、
number、string、userdata、function、thread 和table。函數type 可以測試給定變量或者值
的類型。

兩個取值false 和true。但要注意Lua 中所有的值都可以作為條件。在控制結構的條
件中除了false 和nil 為假,其他值都為真。所以Lua 認為0 和空串都是真。

第3 章  表達式

a and b      -- 如果a為false,則返回a,否則返回b
a or  b       -- 如果a為true,則返回a,否則返回b

一個很實用的技巧:如果x 為false 或者nil 則給x 賦初始值v
x = x or v
等價于
if not x then
   x = v
end
and 的優先級比or 高。

not 的結果一直返回false 或者true
print(not nil)         --> true


邏輯運算符認為false 和nil 是假(false),其他為真,0 也是true.
and 和or 的運算結果不是true 和false,而是和它的兩個操作數相關。
a and b      -- 如果a為false,則返回a,否則返回b
a or  b       -- 如果a為true,則返回a,否則返回b
例如:
print(4 and 5)         --> 5
print(nil and 13)       --> nil
print(false and 13)     --> false
print(4 or 5)          --> 4
print(false or 5)       --> 5
一個很實用的技巧:如果x 為false 或者nil 則給x 賦初始值v
x = x or v
等價于
if not x then
   x = v
end
and 的優先級比or 高。
 
C 語言中的三元運算符
a ? b : c
在Lua 中可以這樣實現:
(a and b) or c
 
not 的結果一直返回false 或者true
print(not nil)         --> true
print(not false)        --> true
print(not 0)           --> false
print(not not nil)      --> false

連連接接運運算算符符 
..        --兩個點
字符串連接,如果操作數為數字,Lua 將數字轉成字符串。
print("Hello " .. "World")     --> Hello World
print(0 .. 1)                --> 01

w = {x=0, y=0, label="console"}
x = {sin(0), sin(1), sin(2)}
w[1] = "another field"
x.f = w
print(w["x"])    --> 0
print(w[1])      --> another field
print(x.f[1])    --> another field
w.x = nil        -- remove field "x"


在構造函數中域分隔符逗號(",")可以用分號(";")替代,通常我們使用分號用來
分割不同類型的表元素。
{x=10, y=45; "one", "two", "three"}
print(not false)        --> true
print(not 0)           --> false
print(not not nil)      --> false

第4 章  基本語法
Lua  可以對多個變量同時賦值,變量列表和值列表的各個元素用逗號分開,賦值語
句右邊的值會依次賦給左邊的變量。
a, b = 10, 2*x      <-->      a=10; b=2*x

遇到賦值語句Lua 會先計算右邊所有的值然后再執行賦值操作,所以我們可以這樣
進行交換變量的值:
x, y = y, x                  -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i]        -- swap 'a[i]' for 'a[i]'

當變量個數和值的個數不一致時,Lua 會一直以變量個數為基礎采取以下策略:
a. 變量個數>值的個數          按變量個數補足nil
b. 變量個數<值的個數          多余的值會被忽略
例如:
a, b, c = 0, 1 
print(a,b,c)           --> 0   1   nil
 
a, b = a+1, b+1, b+2    -- value of b+2 is ignored
print(a,b)             --> 1   2
 
a, b, c = 0
print(a,b,c)           --> 0   nil   nil

多值賦值經常用來交換變量,或將函數調用返回給變量:
a, b = f()
f()返回兩個值,第一個賦給a,第二個賦給b。

我們給block 劃定一個明確的界限:do..end 內的部分。

控制結構的條件表達式結果可以是任何值,Lua 認為false 和nil 為假,其他值為真。

repeat-until 語句:
repeat
   statements;
until conditions;

有時候為了調試或者其他目的需要在block 的中間使用return 或者break,可以顯式
的使用do..end 來實現:
function foo ()
   return          --<< SYNTAX ERROR
   -- 'return' is the last statement in the next block
   do return end       -- OK
   ...             -- statements not reached
end

調用函數的時候,如果參數列表為空,必須使用()表明是函數調用。
print(8*9, 9/8)
a = math.sin(3) + math.cos(10)
print(os.date())
上述規則有一個例外,當函數只有一個參數并且這個參數是字符串或者表構造的時
候,()是可選的:
print "Hello World"     <-->      print("Hello World")
dofile 'a.lua'         <-->      dofile ('a.lua')
print [[a multi-line    <-->      print([[a multi-line
         message]]                       message]])
f{x=10, y=20}          <-->      f({x=10, y=20})
type{}                <-->      type({})

Lua 函數實參和形參的匹配與賦值語句類似,多余部分被忽略,缺少部分用nil 補足。
function f(a, b) return a or b end
 
CALL            PARAMETERS
 
f(3)            a=3, b=nil
f(3, 4)         a=3, b=4
f(3, 4, 5)       a=3, b=4  (5 is discarded)

Lua 函數中,在return 后列出要返回的值得列表即可返回多值,如:
function maximum (a)
   local mi = 1           -- maximum index
   local m = a[mi]        -- maximum value
   for i,val in ipairs(a) do
      if val > m then
         mi = i
         m = val
      end
   end
   return m, mi
end
 
print(maximum({8,10,23,12,5}))     --> 23   3
Lua  總是調整函數返回值的個數去適用調用環境,當作為一個語句調用函數時,所
有返回值被忽略。假設有如下三個函數:
function foo0 () end                -- returns no results
function foo1 () return 'a' end       -- returns 1 result
function foo2 () return 'a','b' end   -- returns 2 results
第一,當作為表達式調用函數時,有以下幾種情況:
1.  當調用作為表達式最后一個參數或者僅有一個參數時,根據變量個數函數盡可能
多地返回多個值,不足補nil,超出舍去。
2.  其他情況下,函數調用僅返回第一個值(如果沒有返回值為nil)
x,y = foo2()           -- x='a', y='b'
x = foo2()             -- x='a', 'b' is discarded
x,y,z = 10,foo2()       -- x=10, y='a', z='b'
 
x,y = foo0()           -- x=nil, y=nil
x,y = foo1()           -- x='a', y=nil
x,y,z = foo2()         -- x='a', y='b', z=nil
x,y = foo2(), 20        -- x='a', y=20
x,y = foo0(), 20, 30    -- x='nil', y=20, 30 is discarded
第二,函數調用作為函數參數被調用時,和多值賦值是相同。
print(foo0())          -->
print(foo1())          --> a
print(foo2())          --> a   b
print(foo2(), 1)        --> a   1
print(foo2() .. "x")    --> ax
第三,函數調用在表構造函數中初始化時,和多值賦值時相同。
a = {foo0()}           -- a = {}    (an empty table)
a = {foo1()}           -- a = {'a'}
a = {foo2()}           -- a = {'a', 'b'}
 
a = {foo0(), foo2(), 4}  -- a[1] = nil, a[2] = 'a', a[3] = 4
另外,return f()這種類型的返回f()返回的所有值
function foo (i)
   if i == 0 then return foo0()
   elseif i == 1 then return foo1()
   elseif i == 2 then return foo2()
   end
end
 
print(foo(1))       --> a
print(foo(2))       --> a  b
print(foo(0))       -- (no results)
print(foo(3))       -- (no results)
可以使用圓括號強制使調用返回一個值。
print((foo0()))     --> nil
print((foo1()))     --> a
print((foo2()))     --> a

posted on 2009-02-26 16:15 Code Knight 閱讀(896) 評論(0)  編輯 收藏 引用 所屬分類: 腳本

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一本色道**综合亚洲精品蜜桃冫 | 久久国产手机看片| 亚洲大胆视频| 欧美在线视频导航| 欧美一站二站| 久久综合狠狠综合久久综合88 | 国产一区在线看| 黄色成人免费网站| 亚洲国产精品va在线看黑人动漫| 亚洲国产综合91精品麻豆| 亚洲精华国产欧美| 欧美成人免费全部观看天天性色| 欧美11—12娇小xxxx| 欧美激情视频一区二区三区在线播放 | 狠狠色丁香久久综合频道| 激情久久中文字幕| 99re6热只有精品免费观看| 洋洋av久久久久久久一区| 亚洲宅男天堂在线观看无病毒| 欧美一二区视频| 免费日韩av片| 亚洲午夜一区二区三区| 久久久久国产精品午夜一区| 欧美人与禽性xxxxx杂性| 欧美一级大片在线免费观看| 亚洲人体偷拍| 午夜精品久久久久久99热软件| 欧美在线日韩在线| 亚洲国产日韩一级| 亚洲欧美大片| 欧美国内亚洲| 国内成人精品一区| 在线亚洲一区观看| 麻豆av福利av久久av| 9l视频自拍蝌蚪9l视频成人| 欧美伊人久久久久久久久影院| 欧美男人的天堂| 国模私拍一区二区三区| 亚洲五月六月| 亚洲国产高清在线| 久久久久久久一区二区三区| 国产精品久久久久久久电影 | 欧美夫妇交换俱乐部在线观看| 欧美日韩国产免费| 亚洲第一天堂av| 欧美在线综合| 亚洲一级网站| 欧美午夜精品一区| 一本大道久久a久久精二百| 久久夜色精品一区| 亚洲色在线视频| 欧美精品电影| 日韩亚洲精品电影| 亚洲激情国产精品| 女仆av观看一区| 亚洲国产精品欧美一二99| 久久久久99精品国产片| 亚洲影院污污.| 欧美亚洲第一页| 这里只有精品视频| 艳女tv在线观看国产一区| 欧美国产精品v| 日韩午夜三级在线| 亚洲日本欧美天堂| 欧美日韩一区二区在线观看视频| 一区二区三区欧美成人| 日韩亚洲视频在线| 国产精品欧美久久| 欧美伊人精品成人久久综合97| 先锋影音久久久| 国产一区av在线| 麻豆精品视频| 欧美激情a∨在线视频播放| 99国产一区二区三精品乱码| 亚洲精品综合| 国产精品啊v在线| 久久国产精品久久久久久电车| 久久成人精品| 欧美黄色小视频| 亚洲毛片在线观看| 国产精品人成在线观看免费 | 久久九九全国免费精品观看| 久久黄色影院| 亚洲国产精品女人久久久| 亚洲人成网站777色婷婷| 欧美日韩一区二区三区在线| 久久精品国产欧美激情| 可以看av的网站久久看| 亚洲午夜精品久久久久久app| 亚洲欧美中文在线视频| 亚洲盗摄视频| 亚洲视频欧美在线| 亚洲高清资源| 亚洲一区免费观看| 亚洲肉体裸体xxxx137| 亚洲一区图片| 最新亚洲电影| 亚洲女优在线| 亚洲精品日韩久久| 午夜精品久久久久影视 | 欧美日韩国产限制| 久久久精品性| 欧美午夜性色大片在线观看| 久久综合九色综合欧美就去吻| 欧美另类69精品久久久久9999| 午夜日韩在线观看| 欧美国产高清| 久久综合五月天婷婷伊人| 欧美日韩三级在线| 欧美成va人片在线观看| 国产精品私房写真福利视频| 美女精品自拍一二三四| 99国产精品99久久久久久| 亚洲午夜精品国产| 欧美11—12娇小xxxx| 欧美一区国产在线| 欧美日韩三级在线| 亚洲第一精品久久忘忧草社区| 国产欧美一区视频| 在线亚洲激情| 一区二区三区不卡视频在线观看 | 亚洲专区欧美专区| 亚洲视频导航| 欧美区国产区| 亚洲人成人一区二区三区| 亚洲国产福利在线| 久久视频一区| 免费av成人在线| 激情综合激情| 久久久精品久久久久| 久久精品夜色噜噜亚洲a∨| 国产精品久久久久免费a∨| 日韩午夜av在线| 国产精品国产三级国产aⅴ入口| 国产精品久久久久久影视| 久久婷婷国产综合尤物精品| 欧美日韩直播| 亚洲精品在线免费| 亚洲精品一级| 欧美男人的天堂| 亚洲免费av网站| 中文在线不卡视频| 国产精品s色| 亚洲综合不卡| 久久国产主播| 国语自产偷拍精品视频偷 | 久久偷窥视频| 一区二区三区自拍| 久久躁日日躁aaaaxxxx| 欧美高清在线一区二区| 亚洲精品欧洲精品| 欧美日韩免费观看一区三区 | 一区二区三区精品国产| 亚洲一区二区三区乱码aⅴ| 亚洲综合好骚| 国产精品一区二区三区久久| 亚洲综合久久久久| 欧美一区二区在线免费观看| 国产亚洲第一区| 麻豆91精品91久久久的内涵| 最新国产成人av网站网址麻豆| 一区二区三区欧美在线| 国产精品美女久久久久久免费| 欧美影视一区| 亚洲国产影院| 欧美一二三区在线观看| 永久久久久久| 欧美色另类天堂2015| 性欧美8khd高清极品| 欧美激情黄色片| 亚洲综合三区| 亚洲国产婷婷香蕉久久久久久| 欧美三级网页| 久久免费的精品国产v∧| 亚洲美女毛片| 久久久久久一区二区| 一本色道久久综合狠狠躁篇怎么玩| 国产精品美女久久久久久免费| 久久久久久9| 一本色道久久加勒比88综合| 久久尤物电影视频在线观看| 中文精品视频一区二区在线观看| 国内精品福利| 欧美三级免费| 欧美丰满高潮xxxx喷水动漫| 性欧美1819性猛交| 一区二区不卡在线视频 午夜欧美不卡'| 久久久久久黄| 亚洲欧美日韩在线观看a三区| 亚洲黄色在线观看| 国产欧美一区二区三区另类精品| 欧美成人黑人xx视频免费观看| 亚洲免费视频观看| 亚洲精品日韩在线观看| 欧美成年人视频| 欧美一区日本一区韩国一区| 亚洲精品国产精品乱码不99按摩| 国产一区二区三区直播精品电影| 欧美日韩国产一区精品一区| 欧美a级片网|