lua中的函式的乙個很特殊也很有用的性質,即可以有多個返回值。包括一些內建的函式就是這樣。比如string.find函式,在給定的字串中查詢乙個pattern,如果有匹配的部分,則返回對應的頭、尾的兩個索引值;如果不存在匹配,則返回nil。當然,使用者定義的函式也可以有多個返回值,通過return關鍵字返回多個結果即可。比如乙個返回陣列中最大值及其索引的函式:
function max(a)
local m = a[1];
local mindex = 1;
for i,v in ipairs(a) do
if v>m then
m = v;
mindex = i;
endend
return m,mindex;
end
通常情況下,lua會根據函式呼叫的不同情況自動調整返回值的有效個數。主要有以下幾種情況:
1. 如果函式呼叫作為乙個單獨的語句,比如max(),則忽略所有的返回值;
2. 如果呼叫處在一串的表示式中:
1)如果處於表示式串的首位或中間,則只有第乙個返回值被返回;
2)如果處於最後乙個表示式,則所有的返回值都有效;
拿下面三個函式作為例子:
function f0() end;
function f1() return "a" end
function f2() return "a","b" end
在多重賦值中,如果函式呼叫作為僅有的或最後乙個表示式,則返回盡可能多的值來匹配左邊的變數,如果多出,自動忽略;如果不夠,賦為nil。比如,
x = f1() --x="a","b"被忽略
x,y = f1() --x="a",y="b"
x,y,z = f2() --x="a",y="b",z=nil
x,y,z = 10,f2() -- x=10, y="a", z="b"
x,y,z = f2(),10 -- x="a", y=10, z=nil, f2只返回乙個值
同理, 作為另乙個函式的引數時,規則一樣:
print(f2()) --> a b
print(f2(), 1) --> a 1
還有用來構造陣列時:
t = -- t =
t = -- t[1] = nil, t[2] = "a", t[3] = 4
最後,當函式返回值作為另乙個函式的返回值被返回時,則全部被返回。如果想強制只返回乙個值 ,則可以用括號 "()" 把表示式括起來即可。比如:
function foo (i)
if i == 0 then return foo0()
elseif i == 1 then return foo1()
elseif i == 2 then return foo2()
endend
print(foo(1)) --> a
print(foo(2)) --> a b
print(foo(0)) -- (無返回值)
print(foo(3)) -- (無返回值)
如果想強制只返回乙個值,則可以用括號 "()" 把表示式括起來即可:
print((foo0())) --> nil
print((foo1())) --> a
print((foo2())) --> a
(見《programming in lua, 2rd》)
python函式多個返回值
python函式可以返回多個值嗎?答案是肯定的。比如在遊戲中經常需要從乙個點移動到另乙個點,給出座標 位移和角度,就可以計算出新的新的座標 import math def move x,y,step,angle 0 nx x step math.cos angle ny y step math.si...
主函式的返回值返回給誰 主函式返回值
responsebody報406 原因是 要返回的物件沒有setget方法sdfsdf 自定義視 析器和缺省視 析器需同時使用才好用 如果以redireci或forward字首,那麼 走缺省視 析器 return redirect index.jsp return forward index 需寫全...
函式返回值
這裡接著探求被調函式的返回值是如何傳遞到主調函式中的,下面為c程式。add函式通過直接返回a b的,而add1函式先定義乙個區域性變數c,儲存a b的值,然後再返回c的值。其中a b可以當成乙個臨時變數,其結果是暫時存放在暫存器中的 eax 參照反匯程式設計序,可以看出函式的值並不是通過壓棧 基址定...