Методы с поддержкой синтаксиса
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) |
|
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