Я не думаю, 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
уже был импортирован.