Ich habe eine Methode, genannt RateOfChange
die zwei Werte annimmt, die im Abstand von einer Sekunde gelesen werden, und das Ergebnis zurückgibt.
Für zwei Positionen wird die Geschwindigkeit zurückgegeben, für zwei Geschwindigkeiten die Beschleunigung, für zwei Energiewerte die Joule/Sekunde usw.
Das ist physikalisch möglich, aber die Maßeinheiten lassen mich das nicht tun - bei der ersten Verwendung ist die Methode auf einen bestimmten Typ beschränkt:
let RateOfChangeWithTime (value1, value2) = (value2 - value1) / 1.0<SI.s>
let velocity = RateOfChangeWithTime(2.0<SI.m>, 1.0<SI.m>)
let acceleration = RateOfChangeWithTime(3.0<SI.m/SI.s>, 2.0<SI.m/SI.s>)
Die Linie velocity =
bewirkt, dass die Methode auf float<SI.m> -> float<SI.m>/float<SI.s>
, was natürlich für die Geschwindigkeit richtig ist, aber die Linie acceleration =
... kann dann nicht kompiliert werden, da es eine float<SI.m/SI.s>
die von der Methode nicht erwartet wird.
Ich würde wollen RateOfChangeWithTime
nicht an den übergebenen Typ angepasst werden, sondern nur eine durch Sekunden geteilte Maßeinheit zurückgeben.
Dies würde eher einer realen Situation entsprechen. Ist dies möglich? (Ich versuche, dies für ein komplizierteres Szenario zu tun - siehe hier ( http://taumuon-jabuka.blogspot.com/2010/11/f-units-of-measure-with-reactive.html )