Dlang描述out參數爲:是一個out參數,它的值被隱式重新初始化了嗎?
在與用於 其類型的默認值的函數入口進行初始化的參數。
參數初始化爲函數入口的默認值後,是不是本質上只是一個ref
?
import std.stdio;
void foo(out int x)
{
writeln(x); //prints 0
x = 2;
}
void main()
{
int x = 1;
writeln(x); //prints 1
foo(x);
writeln(x); //prints 2
}
我沒有看到比較out
到ref
任何文件。
它是精確的概念化的out
參數從寫作的捷徑:
import std.stdio;
void foo(ref int x)
{
x = x.init; //happens implicitly
writeln(x); //prints 0
x = 2;
}
void main()
{
int x = 1;
writeln(x); //prints 1
foo(x);
writeln(x); //prints 2
}
我不知道該語言的複雜性,所以我很擔心,有這種印象將導致未來我悲傷無法預料情況。
這些parameter storage classes
之間可以有更強烈的區別,還是它真的是自動重新初始化的ref參數?
「把params看作是額外的返回值」:這是正確的,但我會說out參數不會用在慣用的D2代碼中。使用Tuple!()作爲返回值通常是更好的解決方案。 – jpf
我不喜歡Tuple(如果我走這條路線,我更喜歡返回一個帶命名字段的命名結構體),但是,你說得對,很多代碼都是這樣做的,並且輸出參數相對較少。 –