程式設計中經常遇到有多個返回值的情況,下面提供了幾種方法供參考。
方法一:
getperson(out var name, out var age, out var male);
debug.log(name + " " + age + " " + male);
public void getperson(out string name, out int age, out bool male)
方法二:
var person = getperson();
debug.log(person.name + " " + person.age + " " + person.male);
public struct person
public person getperson()
;}
方法三:
var person = getperson_();
debug.log(person.name + " " + person.age + " " + person.male);
public (string name, int age, bool male) getperson()
個人理解:
方法一使用了out,寫起來也比較方便,但是會造成api的不容易理解,因為out更多被視為額外輸出。
方法二使用了結構體, 結構體的還是能比較好的總結輸出,但大量使用一次性型別會將**弄得一團糟。
方法三使用了valuetuple,valuetuple的字段和結構體一樣擁有描述性名字,用起來也比較方便,但是元組這個方案增加字段不是很方便。 tupleelementnames 屬性只能由編譯器賦予。如果返回型別上使用了反射,你將只能看到裸的 valuetuple 結構體。因為在獲得結果時,屬性是位於函式本身上,而這個資訊丟失了。
綜上,如果是資料比較大的返回值可以用引用型別,如果是資料比較小的返回值,使用頻繁的話可以使用結構體,但是一次性的建議使用元組。對於public api並且資料可能會被修改的話,可以使用結構體,非public的話可以使用元組,這樣使用和修改都挺方便。out返回值更多被視為返回值的補充,不要把資料一股腦使用out返回。
python函式多個返回值
python函式可以返回多個值嗎?答案是肯定的。比如在遊戲中經常需要從乙個點移動到另乙個點,給出座標 位移和角度,就可以計算出新的新的座標 import math def move x,y,step,angle 0 nx x step math.cos angle ny y step math.si...
Lua函式的多個返回值
lua中的函式的乙個很特殊也很有用的性質,即可以有多個返回值。包括一些內建的函式就是這樣。比如string.find函式,在給定的字串中查詢乙個pattern,如果有匹配的部分,則返回對應的頭 尾的兩個索引值 如果不存在匹配,則返回nil。當然,使用者定義的函式也可以有多個返回值,通過return關...
C 函式返回值。
一 params.可變引數,無論有幾個引數,必須出現在引數列表的最後,可以為可變引數直接傳遞乙個對應型別的陣列。class program test msg intarry static void test string msg,params int args 二 ref 引用傳遞 三 out ou...