Dlang описывает выход параметр, как:Является ли параметр out значением ref, значение которого неявно повторно инициализируется?
параметра инициализируется при входе функции со значением по умолчанию для его типа.
После того, как параметр инициализирован значением по умолчанию для ввода функции, разве это не просто 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, который автоматически переинициализируется?
«Представьте, что параметры являются дополнительными возвращаемыми значениями»: это правильно, но я бы сказал, что параметры не используются в идиоматическом коде D2. Использование Tuple!() В качестве возвращаемого значения часто является лучшим решением. – jpf
meh, мне не нравится Tuple (я предпочитаю возвращать именованную структуру с именованными полями, если я иду по этому маршруту), но да, вы правы, много кода делает это, а параметры params относительно редки. –