1. 程式人生 > >lua學習筆記day02-----函式

lua學習筆記day02-----函式

當函式只有一個引數的時候,且這個引數是字串或者是表構造的時候。呼叫形式可以如下:

print"hello word"     type{}

函式的形參和實參匹配的時候,和多值賦值是一樣的,實參多餘的部分會捨棄,少的部分會用nil填上

多值返回 :

function foo2 ()

return 4,5

end

當函式被獨立呼叫的時候(類似:foo2()),它的返回值將被忽略。

當函式作為表示式被掉用的時候有兩種情況:

1、函式作為這個表達表示式的唯一引數,或者時最後一個引數,它會盡可能多的返回值。

PS:

x=foo2() ==> x = 4

x,y=foo2() ==> x=4,y=5

x,y,z = foo2() ==> x=4,y=5,z=nil

print (10,foo2())   ==> 10,4,5

2、其他情況下,foo2只返回第一個值

PS:print(foo2(),10)  ==> 4,10

function foo(i)

if i==1 then return foo1()

elseif i==2 then return foo2()

elseif i==3 then return foo3()

end

end

像上述這種情況,foo*是在另一個函式的return語句中的。

如果單純的呼叫foo(i),那麼foo*()是返回所有的值的。

如果是(foo(i)),這麼呼叫,那麼foo*()只返回第一個值。

如果在return語句之後加括號,例如 return(foo2()),也會導致foo2()只返回第一個值。

可變引數 :

在函式的形參中可以通過 ... 來表示一個函式還擁有其他未知的引數。

PS :test(x,...)

在呼叫test的時候,會把第一個實參放到x中,剩下的實參會放到test 的arg表中,arg表還包含一個recod 記錄具體實參的個數。

PS: test (10,9,8)  x=10,  arg={9,8,n=2}

可以通過操作arg表來把函式的實參讀取出來,給其他函式用。

(ps:這個例子我在虛擬機器上沒有嘗試成功,需要之後回頭再看)

找到原因了,在lua5.2版本里,已經取消了這個預設的arg表,如果要使用可變部分的引數,需要顯式的宣告一個表去接受,例如:

function test(...)

arg = {...}

...

end

命名引數 :

因為lua是可以將表作為函式的引數的,所以可以通過表的索引來指定表中的某個元素的值。

PS:假設test是可變引數,且有具體實現

function test(arg)

return test(arg.one,arg.two)

end

這個時候呼叫test,它的引數就可以用以下方式填寫

test{”one“=big,“two”=small}

這種方法的好處在於,不需要記住引數的位置,且每個元素有個性化的索引,非常直觀的知道哪個引數,需要帶入什麼值。

相關推薦

lua學習筆記day02-----函式

當函式只有一個引數的時候,且這個引數是字串或者是表構造的時候。呼叫形式可以如下: print"hello word"     type{} 函式的形參和實參匹配的時候,和多值賦值是一樣的,實參多餘的部分會捨棄,少的部分會用nil填上 多值返回 : function foo

lua學習筆記day02-----基本語法

第4章賦值 :lua支援多值賦值。PS:a,b=4,5多值賦值,先計算等號右邊的值,計算完才開始賦值,所以有以下特殊應用:a,b=b,a當等號左邊變數的數量和等號右邊的數值個數不想等時,按照以下規則進行賦值。左邊>右邊:a,b,c=1,2   ==> a=1,b=

lua學習筆記---Function(函式)

function 我暫且叫他函式,類似於C語言中的指標,但是比指標更強大。 形式: function –關鍵字 函式名(引數列表) return 分支 end 例如: function add(a,b) return a

lua學習筆記函式

Lua學習筆記之函式 1、  函式的作用 函式主要完成指定的任務,這樣的情況下函式作為呼叫語句使用,函式可以計算並返回值,這樣的情況下函式作為賦值語句的表示式使用。 語法: funcationfunc_name(arguments-list) Statements-list

Lua學習筆記函式

使用函式 建立函式   function關鍵字用於建立新的函式,可以將其存放在一個變數中,或直接呼叫。   例: >hello = function() >>print("Hello World!") >>

Nodejs學習筆記 day02——REPL和回撥函式

  1、REPL(互動式直譯器): Node自帶互動式直譯器: 讀取使用者輸入 ==> 執行輸入的資料結構 ==> 列印輸出結果(迴圈執行,直到使用者按ctrl+c兩下後結束)   變數: var x = 10 //宣告變數並賦值,如果沒有

Lua學習筆記(6): 函式

Lua的函式 函式用於簡化程式,當某些工作需要重複執行的時候就可以使用函式減輕工作量(雖然複製貼上也行) 語法: function 函式名(引數列表) 函式體 return 返回值 end --結束標誌 function識別符號用於宣告函式,函式的返回

lua學習筆記14:函式多返回值

Lua中函式可以返回多個值,為了說明不同情況下,返回值的個數,我們先宣告如下幾個函式:-- 無返回值 function fun0() end -- 一個返回值 function fun1()

Lua學習筆記函式

數字型for 的格式,exp3預設為1   for var=exp1 , exp2 , exp3  do   <執行體>   end 泛型for迭代的型別,標準庫中提供了幾種迭代器:   io.lines() 用於迭代檔案中每行   pairs() 迭代table中元素   ipairs() 迭代

Lua學習筆記 第六章 深入函式

在Lua中,函式是一種第一類值,它們具有特定的詞法域; 第一類值表示函式與其他傳統型別的值具有相同的權利,函式可以儲存到變數中或table中, 可以作為實參傳遞給其他函式,還可以作為其他函式的返回值; 詞法域是指一個函式可以巢狀在另一個函式中,內部的函式可以訪問外部函式中的

Lua學習筆記--函式初探

感覺學習語言的話,函式是個重頭戲。來看一下Lua的函式是神馬樣紙的東東! 一.簡單的函式例子 --一個簡單的函式:階乘 function factorial(num) if num == 0 th

lua學習筆記】——2在sublime中配置Lua運行環境

author command ges () 作者 ctrl+ bindings text inf 一、讓Sublime可以運行lua腳本 打開sublime 選擇tools-->Build System-->New Build System 在新出現的文件中

lua學習筆記1 環境配置

http windows 安裝完成 顯示 get 技術分享 開發平臺 org www 1 開發平臺 windows7 64位 2 下載鏈接 http://www.lua.org/download.html 3 安裝完成-環境配置 4 運行 WIN+R 運行

Python學習筆記DAY3---函式

         關於函式,程式設計哪裡少的了函式,Python裡的函式呢,使用def 來定義,如下例子: def fun(): print('這是一個函式')         &nb

Python學習筆記(二) 函式

1.內建函式 Python有很多自帶的函式,在api裡很容易找到 菜鳥教程的Python內建函式講的也不錯 這裡先試試幾個能猜的出作用的簡單函式 函式名 描述 abs() 返回數字的

tensorflow學習筆記各個函式解析

弄清以下問題的含義: 1. tf.train.global_step 獲取全域性訓練步數, 由 各種損失函式優化器中的minimize()方法負責自動加1 sess.run( fetches, feed_dict=None, o

C++學習筆記2_函式.函式指標

1. 行內函數void printAB(int a,int b){   cout<<(a)<<(b)<<endl;}int main(void){   for(int i=0;i<1000;i++)   {     int j=i+1;     printAB(i,j

前端學習筆記day02 CSS盒子模型

1. 製作導航欄: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Document</title> <

C++學習筆記——虛擬函式

用virtual關鍵字說明的函式是虛擬函式,是實現執行時多型的基礎,C++中的虛擬函式是動態繫結的函式,且必須是非靜態的函式成員,虛擬函式經過派生之後就可以實現執行過程中的多型。 一般成員函式可以是虛擬函式,建構函式不可以是虛擬函式,解構函式可以是虛擬函式。 虛擬函式的宣告格式: vir

C++學習筆記——建構函式例項

/************************************************************************************************************************************************ 1.&n