Специальные функции

Специальные функции определяются с помощью ключевого слова 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"

Функция может быть определена как метод.