2016年1月23日 星期六

Lua: Function

function的基本寫法

function max(a, b)
  if(a>b) then return a
  else return b
  end
end

print(max(10, 20))
--> 印出來的結果為 20

但如果這樣寫就會出錯,還不清楚為何…
> local function max(a, b)
>> if(a>b) then return a
>> else return b
>> end
>> end
> print(max(10, 20))
stdin:1: attempt to call global 'max' (a nil value)
stack traceback:
        stdin:1: in main chunk
        [C]: ?


因為function都是以「傳值」的方式在處理參數,因此會有以下的結果
> function func1(a, b)
>> local tmp = a
>> a = b
>> b = tmp
>> print("change in function:", a, b)
>> end
> x = 1
> y = 2
> func1(x, y)
change in function:     2       1
> print(x, y)
1       2

當傳入function的參數較function定義的參數多時基本上不會有問題,系統會把多的拿掉
> function func2(a, b)
>> print(a, b)
>> end
> func2(1, 2)
1       2
> func2(1, 2, 3, 4)
1       2

又或傳入的參數較function定義的參數少時也不會有問題,系統會自動補 nil進來
> function func3(a, b, c, d)
>> print(a, b, c, d)
>> end
> func3(1, 2)
1       2       nil     nil

不固定數量的function參數雖然說可以用,但是我的Lua卻是error的
> funcation func4(...)
stdin:1: '=' expected near 'func4'




沒有留言:

張貼留言