为Julia中的数字创建包装器类

为Julia中的数字创建包装器类,julia,Julia,我在Julia中有几个函数,它们都是等熵关系,给定一定的温度、压力或密度比。我想制作三种类型的wrap Number(或Float64,以适用者为准)来表示不同类型的比率 这些类型需要通过类型断言(即::PressureRatio!=::TemperatureRatio)来区分。我可以创建一个单字段复合类型,但理想情况下,它应该是Number的子类型,以便数学运算按预期工作 目前,我只尝试创建Number的泛型子类,但当我尝试实例化它时,没有转换方法可以从Float64转换为PressureRa

我在Julia中有几个函数,它们都是等熵关系,给定一定的温度、压力或密度比。我想制作三种类型的wrap Number(或Float64,以适用者为准)来表示不同类型的比率

这些类型需要通过类型断言(即::PressureRatio!=::TemperatureRatio)来区分。我可以创建一个单字段复合类型,但理想情况下,它应该是Number的子类型,以便数学运算按预期工作


目前,我只尝试创建Number的泛型子类,但当我尝试实例化它时,没有转换方法可以从Float64转换为PressureRatio(例如)

有人有什么想法,或者更好的想法吗


谢谢

以下是定义新类型数字的示例:


如果您定义的方法与该文件中的所有方法相似,那么最基本的方法都应该可以使用。

“目前我只尝试创建Number的泛型子类,但当我尝试实例化它时,没有转换方法可以从Float64转换为PressureRatio(例如)。”您能展示一下您尝试的方法吗?您将不得不实现一系列方法。但我不清楚你为什么要这样做,除非你试图使用类型系统来执行单位计算,在这种情况下,你应该检查Unitful。JL这个想法是为了避免出现“我使用的是压力比,我使用的是温度比,还是我使用的是密度比?”通过一些易受用户/开发人员错误影响的额外字符串参数。通过为这些类型的东西创建类型,一切都变得更加明确,Julia的多分派功能也可以得到利用。而且,如果这种用例作为未来的语言功能得到支持,那就有点酷了,在OOP语言中,只需使用一些伪类对某个对象进行子类化是非常可行的……但我可以看出,在某些情况下,这会有点复杂/烦人。这可能是显而易见的,但如果您遵循Jeff的答案,则不必为每种新类型扩展方法。只需在每个新类型中使用相同的字段名,使它们都成为某个抽象超类型的子类型,例如
MyAbstractFloat
,它可以是
Number
的子类型,然后只需将标准方法扩展到
MyAbstractFloat
。这有意义吗?(至少我在我的代码库中是这样做的)“而且,如果这种用例作为未来的语言特性得到支持,那就有点酷了,在OOP语言中,只要用一些伪类对某些东西进行子类化就可以了。”。是的,Julia也通过抽象类型来实现。这在抽象类型上没有一个简单的接口的原因是因为Julia中的基本数字不是复合类型。它们是位类型(或现在的原语),您可以通过位的数量来定义它们,然后通过LLVM调用来定义基本方法。