我可以在Julia中专门定义类型定义吗?

时间:2015-01-09 10:24:15

标签: julia

Julia的参数类型确实定义了一系列在内存中包含不同布局的类型。我想知道这是否也适用于复合类型的字段名称和数量?一个简单的例子就是:

type mytype{Float64}
    a::Float64
    b::Float64
end

type mytype{Int64}
    a::Int64
end

这使我在重新定义mytype时出错。

在这里,如果mytype的类型参数为Float64,我希望有两个字段,如果Int64只有一个字段。 (实际上我想要的更复杂,但这是一个基本的例子)。可以想象在上面有抽象类型和<:等。

我意识到这在其他语言中可能是不可能的,但对我来说,似乎编译器应该能够像函数专用一样来解决这个问题。毕竟,真实(编译)的代码将涉及具体类型,编译器将知道所有内容。 (对于真正的动态类型,在这种情况下可能需要额外的封装层?)

也许有一种不同的/更好的方法来实现类似的结果?

2 个答案:

答案 0 :(得分:5)

您可以单独定义两种类型(mytypeF&amp; mytypeI),并将新类型mytype定义为两者的并集。然后,真正可以静态地确定他们接收的类型的功能将根据您的要求进行专门化。但我不确定这是否合情合理,或者你真正追求的是什么。

答案 1 :(得分:5)

目前这是不可能的,但该功能已被推测性地提出为&#34;生成类型&#34;问题#8472。只要您注意分组mytype构造函数是类型稳定的,Sebastian的答案就是一个合理的解决方案。有关更完整的示例,请参阅ImmutableArrays.jl如何以编程方式定义抽象ImmutableArray基因座周围的一组类型。