ulidtko 22.11.2011 00:53 dedicated microblogging account

Вот смотрите. Как выглядит бо́льшая часть конструкторов в, скажем, плюсцах и питоне? Правильно, куча ссаного бойлерплейта:

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;;

Я джва года ждал такой синтаксис.

dev
Recommended by: @DZhon, @238328
1. DZhon 22.11.2011 04:15

Продакшен-императивщики соснули, как всегда.

Do you really want to delete ?