Я пытаюсь перенести библиотеку из Elm 0.15 в 0.16. Механизм расширения записи удален.Альтернатива расширению записи Elm
My library предлагает физические вычисления на телах (представлены как записи) и использует расширение записи, чтобы пользователи могли добавлять метки и другие метаданные о телах.
Мои example code показывает это использование путем добавления метки для всех органов после их создания:
labeledBodies = map (\b -> { b | label = bodyLabel b.restitution b.inverseMass }) someBodies
Этот список помеченных органов также передается в библиотеку:
main = Signal.map scene (run labeledBodies tick)
Какие работы: hardcoding a meta
параметр в Body
вот так:
type alias Body a = {
pos: Vec2, -- reference position (center)
velocity: Vec2, -- direction and speed
inverseMass: Float, -- we usually use only inverse mass for calculations
restitution: Float, -- bounciness factor
shape: Shape,
meta: a
}
Но это делает API более неуклюжим, потому что он заставляет вспомогательные функции принимать дополнительный параметр. Есть ли более элегантный способ справиться с этим изменением?
Действительно ли «метка» действительно необходима для записи? Не могли бы вы вместо этого вызвать 'bodyLabel' из функции' run'? –
В этом случае да (но это будет дополнительная работа, выполняющая это каждый раз), но в общем случае нет: я хочу иметь возможность отслеживать и другие метаданные, которые не зависят от тела (например, hitpoints, unique id, что угодно) –