05 - fix 5.2.4 example

This commit is contained in:
Тарас 2024-12-31 05:05:59 +01:00
parent 59446ae9e5
commit 55e58d277d
1 changed files with 2 additions and 1 deletions

View File

@ -258,7 +258,8 @@ void log(string message)
writeln(message);
}
...
int result = foo(); log("foo() returned " ~ to!string(result));
int result = foo();
log("foo() returned " ~ to!string(result));
```
Как видим, вычислять выражение `"foo() returned " ~ to!string(result)` нужно, только если переменная `verbose` имеет значение `true`. При этом выражение, передаваемое этой функции в качестве аргумента, будет вычислено в любом случае. В данном примере это конкатенация двух строк, которая потребует выделения памяти и копирования в нее содержимого каждой из них. И все это для того, чтобы узнать, что переменная `verbose` имеет значение `false` и значение аргумента никому не нужно! Можно было бы передавать вместо строки делегат, возвращающий строку (делегаты описаны в разделе 5.6.1):