Фобос реализует только функции диапазона вне структуры / класса для массивов.Массивы позволяют вам вызывать функции на них, как если бы они были функциями-членами.Итак, если у вас есть эта функция:
int func(int[] arr)
{
return arr[0];
}
, вы можете назвать ее так:
auto arr = [1, 2, 3];
auto val = arr.func();
вместо
auto val = func(arr);
Возможность сделать это со всемиТипы называются универсальным синтаксисом вызова функции, но в настоящее время это недопустимо в D, хотя похоже, что, вероятно, оно будет добавлено.
На самом деле нет причин объявлять ваши функции диапазона за пределами вашего типа диапазона, если только выВы хотите поделиться этой реализацией с другими типами диапазонов, что часто в любом случае было бы невозможно, поскольку внутренняя реализация имеет дело с тем, как тип контейнера поддерживает свои данные.Таким образом, вы можете просто сделать их частью вашего типа диапазона.Это то, что делает Фобос во всех случаях, кроме массивов, которые, очевидно, не могут иметь их как часть своего типа и должны использовать свою способность вызывать функции, как если бы они были функциями-членами, чтобы это работало.