Вобще прикольненький такой язык. Со своими тараканами, конечно (ну почему у всех разработчиков языков программирования — столько в голове тараканов?), но прикольненький.
Типа: что выведет на экран эта программа?import std.stdio;
import std.conv;
void ff(bool a, lazy string s) {
if (a) {
writeln(s);
writeln(s);
writeln(s);
}
}
string ss() {
static int a = 0;
return "Some ss: " ~ (a++).to!string;
}
void main() {
ff(true, ss());
ff(false, ss());
}
Originally published at U.F.M's Homepage. You can comment here or there.
(no subject)
Date: 2015-01-21 07:36 (UTC)Some ss: 0
Some ss: 0
Some ss: 0
Впрочем, не было бы опроса, будь всё так легко, да?
(no subject)
Date: 2015-01-21 07:56 (UTC)Выведет:
Some ss: 0
Some ss: 1
Some ss: 2
Причем, если переставить местами вызовы ff - вывод не изменится.
Параметр функции, описанный как lazy вычисляется только в момент обращения к этому параметру. Но, зато, вычисляется каждый раз.
(no subject)
Date: 2015-01-21 10:34 (UTC)(no subject)
Date: 2015-01-21 10:46 (UTC)http://dlang.org/lazy-evaluation.html