Вот смотрите. Как выглядит бо́льшая часть конструкторов в, скажем, плюсцах и питоне? Правильно, куча ссаного бойлерплейта:
Foo::Foo(t1 crap, t2 shit, t3 piece_of_poo)
: crap_(crap) // ← boilerplate
, shit_(shit) // ← boilerplate
, piece_of_poo_(piece_of_poo) // ← boilerplate
{}
class Foo:
def __init__(self, crap, shit, poo):
self.crap = crap # ← boilerplate
self.shit = shit # ← boilerplate
self.poo = poo # ← boilerplate
В окамле же значительно полущ. Объявление класса можно сделать функцией; её параметры попадают в scope *полностью всего* объявления класса. Эти параметры будет нужно передавать при инстанциации класса, а доступны они для всех методов внутри. Пример:
class foo = fun crap shit poo →
object
val fieldpoo = poo + crap
method do_shit x = shit x — 1
end;;
let a = new foo 5 (fun x → x + 1) 8;;
Я джва года ждал такой синтаксис.
ulidtko
22.11.2011 00:53 dedicated microblogging account
Do you really want to delete ?
Продакшен-императивщики соснули, как всегда.