Методы с поддержкой синтаксиса

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

Was this helpful?