Пустое свойство строки в DLang - PullRequest
0 голосов
/ 31 декабря 2018

https://dlang.org/library/std/string/to_stringz.html говорит, что строка имеет свойство empty.

Но это не так, так как следующая программа не может скомпилировать:

import std.stdio;

string s = "";

void main() {
  writeln(s.empty);
}

Что не так?

Также это свойство empty для строк нулевой длины или для null строки?Я в замешательстве.

Что делает toStringz, если вызывается с аргументом null?

1 Ответ

0 голосов
/ 31 декабря 2018

Я не думаю, empty является свойством string, но его функция может применяться к диапазонам .Благодаря единому синтаксису вызова функции (UFCS) он может выглядеть как свойство, но это не так.Следующие компиляции и распечатки true три раза:

import std.stdio;
import std.array : empty;

string s = "";

void main()
{
    writeln(empty(s)); // normal function call syntax
    writeln(s.empty()); // UFCS
    writeln(s.empty); // UFCS - empty parenthesis can be left out
}

Это было объяснено, например, в Программирование в D :

Простой импорт std.array модуль обеспечивает соответствие наиболее распространенного типа контейнера наиболее подходящему типу диапазона: срезы можно беспрепятственно использовать в качестве RandomAccessRange объектов.

Модуль std.array обеспечивает функции empty, front, popFront() и другие функции диапазона для срезов.В результате срезы готовы к использованию с любой функцией диапазона.

Нет необходимости импортировать std.array, если модуль std.range уже был импортирован.

...