【发布时间】:2013-10-13 11:47:04
【问题描述】:
我想在 Clojure 中实现一些基本的物理/化学公式。 我想强调的不是性能而是便利性,所以主要 功能是类型检查。我在想将元数据附加到数字上 完成任务。
比如这个函数:
(defn force [mass accel]
(* mass accel))
应该
- 访问第一个参数的元
- 确保它是质量类型,即千克、克等。如果不是,则抛出错误。
- 将数值转换为千克。
- 对加速执行相同操作。
- 使用牛顿元返回结果。
我可以在我的命名空间中适当地重载* 和其他函数。
唯一的问题是无法将元数据附加到Double。
有什么好方法可以获取行为类似于数字但可以包含元数据的东西?
【问题讨论】:
-
既然
java.lang.Long和朋友都是final,那么使用java.math.BigDecimal是一个选项吗?如果是这样,您可以扩展它并实现clojure.lang.IObj。 -
我应该以哪种方式扩展? deftype/gen-class/reify?可以举个小例子吗?
-
我刚刚用一些代码添加了答案。我很好奇你将如何实现它,所以它真的不是那么小一个例子:P。希望对您有所帮助。
标签: clojure