Rectangle
type Rectangle =
inherit Control
val memory@atom = (width@atom, height@atom)
|> to_atom
|> map { w, h ->
let quad = Quad.create
up_left = Vector3.new
up_right = Vector3 w.as<f32> 0 0
down_left = Vector3 0 h.as<f32> 0
down_right = Vector3 w.as<f32> h.as<f32> 0
MeshMemory.from_quad quad }
Прямоугольник хранит в себе геометрическую форму, созданную исходя из его ширины и высоты.
type Control
var maybe_drawable : Option<Drawable> = None
Единица упаковки кода называется ящик.
Тип Rectangle определён в ящике control, отвечающем за внутреннюю логику элементов управления. Последний же фрагмент кода находится в ящике drawer, который выводит пользовательский интерфейс на экран и зависит от конкретного отрисовщика, частью которого является Drawable.
type Rectangle
let material : ControlMaterial @auto
val drawable = Drawable
mesh = Mesh.from_memory memory@atom
material = material.unwrap
maybe_drawable = drawable
Поле material получает значение автоматически благодаря атрибуту @auto.
let material @publish = app.drawer.materials.control
let rectangle = Rectangle.new
Атрибут @publish делает значение доступным для подстановки в @auto привязки.
Именно неявная передача значений это не только вопрос снижения сложности. В других ящиках может находиться код, создающий Rectangle, но ничего не знающий о зависимостях, которые он получил в drawer. Весь этот код продолжит работать, но теперь при вызове будет требовать предварительно опубликованную material.