1. 程式人生 > >Lua 函式用法探究

Lua 函式用法探究

 在 中有涉及到函式的用法,但只是普通的應用,並沒有深成次的研究一下,介於函式用的還是比較多的就專門做個專題研究一下~

  一、函式、變數的用法

             函式的定義用關鍵字function 。然後加函式名和變數。注意後面沒有do。最後以end結束。

             在函式中的變數預設是全域性變數,但通常情況下函式中的變數都是在函式中有效的。所以要在宣告的時候加上"local” 標明只在區域性有效。

二、返回多個結果值

           在Lua中的函式可以返回多個返回值。這與C等語言有很大的不同。因為從根本上講Lua支援多賦值。

           我猜測在內部執行時,多個返回值被封裝到了一個table中。然後在賦值時再按順序取出。

            看這個示例:                 

[php] view plaincopyprint?
  1. function max(a)  
  2.     local mi = 1  
  3.     local m = a[mi]  
  4.     for i,val in ipairs(a) do      --其中i為順序位置,val為相應的值  
  5.         print("i= "..i.."val="..val)  
  6.         if val >m then  
  7.             mi = i  
  8.             m = val  
  9.         end
  10.     end
  11.     return m,mi  
  12. end
  13. print(max({8,10,23,12,5}))  

              這個函式的作用是返回一個數列中最大的值和下標。

             在實際應用的過程中,在C中呼叫lua_pcall(L,0,2,0) 即可接受這兩個返回值入棧,然後通過 lua_tonumber(L,-1) 和 lua_tonumber(L,-2)即可

三、可變引數

        Lua 函式可以接受可變數目的引數,和 C 語言類似在函式引數列表中使用三點(...)表示函式有可變的引數。

        Lua 將函式的引數放在一個叫 arg 的表中,除了引數以外,arg表中還有一個域 n 表示引數的個數。

        例如:

[php] view plaincopyprint?
  1. function myprint(...)  
  2.     local printResult = ""     --如果不顯式宣告,程式會自動檢查全域性的變數,會找不到出錯  
  3.     print(arg.n)  
  4.     for i,v in ipairs(arg) do
  5.         printResult = printResult..tostring(v)..'\t'
  6.     end
  7.     printResult=printResult..'\n'
  8.     return printResult  
  9. end
  10. print(myprint(2,4,6,'2es'))  

相關推薦

Lua 函式用法探究

 在 中有涉及到函式的用法,但只是普通的應用,並沒有深成次的研究一下,介於函式用的還是比較多的就專門做個專題研究一下~   一、函式、變數的用法              函式的定義用關鍵字function 。然後加函式名和變數。注意後面沒有do。最後以end結束。

Lua函式的幾種用法詳解

一、lua函式 在面嚮物件語言中函式是一組一起執行任務的語句。可以把程式碼放到獨立的函式中。怎麼劃分程式碼功能之間的不同,但在邏輯上劃分通常是讓每個函式執行特定的任務。在Lua中,函式是作為"第一類值"來使用的,在lua中函式可以儲存在變數中,可以通過引數傳遞給其他函式,或

glViewport函式用法

一、 其函式原型為glViewport(GLint x,GLint y,GLsizei width,GLsizei height) x,y 以畫素為單位,指定了視窗的左下角位置。 width,height表示視口矩形的寬度和高度,根據視窗的實時變化重繪視窗。 二、 在預設情況下,視口被設定為佔據視窗

ROW_NUMBER() OVER()函式用法;(分組,排序),partition by (轉)

1、row_number() over()排序功能: (1) row_number() over()分組排序功能:      在使用 row_number() over()函式時候,over()裡頭的分組以及排序的執行晚於 where group by  order

numpy函式:tile函式用法

tile函式位於python模組 numpy.lib.shape_base中,他的功能是重複某個陣列。比如tile(A,n),功能是將陣列A重複n次,構成一個新的陣列 from numpy import * #initialize the array a = [0,1,2]

Oracle單行函式用法

  單行函式分為五種型別:字元函式、數值函式、日期函式、轉換函式、通用函式。   1.字元函式:   對於輸入的字元轉換為需要轉為的字元或數值。   upper()大寫        --小寫字母轉為大寫字母      --對於表指定

C語言幾個函式用法小結

1.char *ultoa(unsigned long value,char *string,int radix)  將無符號整型數value轉換成字串並返回該字串,radix為轉換時所用基數  2.char *ltoa(long value,char *string,i

numpy中flatten()函式用法

flatten是numpy.ndarray.flatten的一個函式,其官方文件是這樣描述的: ndarray.flatten(order='C') Return a copy of the array collapsed into one dimension. Parameters:

strtol函式用法

之前想用C寫MD5函式用法,中間設計大量進位制轉換的內容,於是就查到了strtol這個函式 但是發現之前對其認識上有一些偏頗,所以把它的用法記錄下來 strtol是一個C語言函式,作用就是將一個字串轉換為長整型long,其函式原型為 long int strtol (const

getline() 函式用法

本文轉自:http://blog.sina.com.cn/s/blog_60263c1c0101ck25.html 學習C++的同學可能都會遇到一個getline()函式,譬如在C++premer中,標準string型別第二小節就是“用getline讀取整行文字”。書上給的程式如下:

PHP array_pad函式用法

<?php //填充陣列到制定長度 $array = [1,2,3,4]; $array1 = [ [1],[2],[3],[4] ]; print_r(array_pad($array,6, 'abc')); //執行結果:Array ( [0] => 1 [1] =

np.nonzero()函式用法

返回陣列中不為0的元素的下標。 陣列中元素可為布林、整型和浮點型,返回值為元祖 一.一維陣列 1.陣列元素為布林型別 a=np.array([True,False,True,False]) b=np.nonzero(a) print(b) 輸出結果為(array([0, 2], dtype

python中的print輸出函式用法總結

【時間】2018.10.12 【題目】python中的print輸出函式用法總結   一、直接輸出 無論什麼型別,數值,布林,列表,字典...都可以直接輸出,或者先賦值給變數,再輸出。     二、格式化輸出 下面是《Python基

Python中split()函式用法和例項

一、描述 split()通過指定分隔符對字串進行切片,如果引數num 有指定值,則僅分隔 num 個子字串 函式形式:str.split(str="", num=string.count(str)) 引數: str -- 分隔符,預設為所有的空字元,包括空格、換行(\n)、製表

numpy中:tile函式用法

tile函式位於python模組 numpy.lib.shape_base中,他的功能是重複某個陣列。比如tile(A,n),功能是將陣列A重複n次,構成一個新的陣列,我們還是使用具體的例子來說明問題 ①先來引入numpy下的所有方法 from numpy import *

【 MATLAB 】nextpow2 函式用法之 Optimize FFT with Padding

您可以使用nextpow2來填充傳遞給fft的訊號。 這樣做可以在訊號長度不是2的精確冪次時加速FFT的計算。 Optimize FFT with Padding   下面這個例子展示了 使用填充優化FFT的案例,通過使用函式nextpow2完成: clc c

ROW_NUMBER() OVER()函式用法詳解 (分組排序 例子多)

語法格式:row_number() over(partition by 分組列 order by 排序列 desc) row_number() over()分組排序功能: 在使用 row_number() over()函式時候,over()裡頭的分組以及排序的執行晚於 wher

C函式之memcpy 函式用法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

srand()以及rand()函式用法

srand()就是給rand()提供種子seed 如果srand每次輸入的數值是一樣的,那麼每次執行產生的隨機數也是一樣的, srand(n) for(10) rand()也就是說,以一個固定的數值作為種子是一個缺點。 通常的做法是  以這樣一句程式碼

libc system函式探究

system導致父程序等待 在mac上的線上幫助有對system的如下說明: The system() function hands the argument command to the command interpreter sh(1). The calling p