Методы с поддержкой синтаксиса
Vala распознает методы с определенными именами и сигнатурами и обеспечивает синтаксическую поддержку для них. Например если у типа есть метод contains(), то их можно использовать с оператором in. Т и Тn здесь обозначают только места, куда должны быть вставлены настоящие типы.
Индексеры
T2 get(T1 index)
index access: obj[index]
void set(T1 index, T2 item)
index assignment: obj[index] = item
Индексеры с множеством индексов
T3 get(T1 index1, T2 index2)
index access: obj[index1, index2]
void set(T1 index1, T2 index2, T3 item)
index assignment: obj[index1, index2] = item
(... и так далее для большего количества индексов)
Другие
T slice(long start, long end)
slicing: obj[start:end]
bool contains(T needle)
in
operator: bool b = needle in obj
string to_string()
поддержка внутри строковых шаблонов: @"$obj"
Iterator iterator()
можно итерировать посредством foreach
T2 get(T1 index) T1 size { get; }
можно итерировать посредством foreach
Другие
T slice(long start, long end)
slicing: obj[start:end]
bool contains(T needle)
in operator: bool b = needle in obj
string to_string()
поддержка внутри строковых шаблонов: @"$obj"
Iterator iterator()
можно итерировать посредством foreach
Тип Iterator может иметь любое имя и должен реализовать один из следующих протоколов:
bool next() T get()
стандартный протокол итератора: итерировать пока .next() не вернеть false. Текущий элемент получается методом .get.
T? next_value()
альтернативный протокол итератора: Если итератор имеет функцию .next_value(), которая возвращает значение, которое может быть null, то мы итерируем вызывая указанный метод, пока он не вернеть null.
Данный пример реализует некоторые из этих методов:
Last updated