Ссылки на функцию это способ передавать и хранить функции. Учитывая всё вышесказанное в пункте 4 2 Контракты и выбор мы можем хранить в ссылке не одну функцию, а сразу несколько вероятных функций, доступных по одной переменной. Для конкретизации перегруженных функций возможно 2 подхода:
1) Использовать дополнительное имя (то что после ::)
2) Скопировать условие
3) Dry run - передать функции параметры для выбора но не вызывать её.
fn func(let a {a >= 0})
{
println!("A");
}
fn func(let b {a < 0})
{
println!("B");
}
let const f = func;
f(10); // A
f(-100); // B
fn func::a()
{}
fn func::b()
{}
let const f = ref func::a;
Первый способ.
fn func(let a {a >= 0})
{}
fn func(let b {a < 0})
{}
let const f = ref func::({>=});
Второй способ.
#import fn::dryrun;
fn func(int a {a >= 0})
{}
fn func(int a {a < 0})
{}
let const f = ref dryrun(func(10));
Третий способ.