Ich versuche, eine Bibliothek von Elm 0.15 zu 0.16 zu migrieren. Der Datensatzerweiterungsmechanismus wurde entfernt.Alternative zu Elm Datensatzerweiterung
My library bietet Physikberechnungen für Körper (als Datensatz dargestellt) und verwendet Datensatzerweiterung, damit Benutzer Beschriftungen und andere Metadaten zu den Körpern hinzufügen können.
Meine example code zeigt diese Anwendung durch ein Etikett an alle Stellen nach ihrer Erstellung Zugabe:
labeledBodies = map (\b -> { b | label = bodyLabel b.restitution b.inverseMass }) someBodies
Diese Liste der markierten Stellen auch in die Bibliothek übergeben wird:
main = Signal.map scene (run labeledBodies tick)
Welche Art von arbeitet: ein meta
Parameter in die Body
wie diese hartzucodieren:
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
}
Das macht die API jedoch etwas ungeschickter, weil sie die Hilfsfunktionen zwingt, einen zusätzlichen Parameter zu übernehmen. Gibt es eine elegantere Art, mit dieser Veränderung umzugehen?
Ist "Label" wirklich notwendig auf der Platte zu beginnen? Könnten Sie stattdessen 'bodyLabel' aus der' run' Funktion aufrufen? –
In diesem Fall ja (aber es würde jedes Mal zusätzliche Arbeit machen), aber im allgemeinen Fall nein: Ich möchte auch andere Metadaten verfolgen können, die nicht vom Körper abhängig sind (zB Hitpoints, unique id, was auch immer) –