Специальные функции
Специальные функции определяются с помощью ключевого слова fun
и не могут быть вызваны стандартным способом.
destruct
Деструктор выполняется перед освобождением памяти. Здесь можно устранить слабые ссылки на объект, например контейнер может очистить поле parent
содержащихся в нём элементов.
from_slice
fun from_slice<T> (slice : Slice<T>) : List<T> = List<T>.from slice
object Framebuffer =
def create (images : List<Image>) = ...
let framebuffer = Framebuffer.create [color, depth]
Массив [color, depth]
преобразуется в Slice<Image>
, из которого from_slice
создаёт List<Image>
.
get
let v = map[k]
Индексатор для чтения.
get_ptr
if array[i].is_occupied then
...
Индексатор для чтения, возвращающий указатель на значение вместо самого значения. Используется для вызова методов на структурах и доступа к их полям.
get_mut_ptr
array[i].is_occupied = true
То же что и get_ptr
, но возвращает изменяемый указатель.
hash
fun hash (x : bool) state =
let i = if x then 1 else 0
Kd.hash<i32> i state
Вычисляет хеш и записывает результат в state
.
def Kd.hash @impl (x : bool) state = ...
Внутри fun hash
разворачивается в специализацию для обобщённого объявления Kd.hash
.
type bool
fun hash state = ...
Функция может быть определена как метод.
new
type WProcessImpl @cpp =
fun new (path : String)
Конструктор внешнего типа, определенного на C++.
set
map[k] = v
Индексатор для записи.
to_string
fun to_string (x : TextPos) = "${x.line}, ${x.char}"
Превращает значение в строку.
def Kd.to_string @impl (x : TextPos) = "${x.line}, ${x.char}"
Внутри fun to_string
разворачивается в специализацию для обобщённого объявления Kd.to_string
.
type TextPos
fun to_string = "$line, $char"
Функция может быть определена как метод.