C 函式多個返回值 解決辦法

2021-10-05 06:35:04 字數 1283 閱讀 4870

程式設計中經常遇到有多個返回值的情況,下面提供了幾種方法供參考。
方法一:

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...