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

And*_*dyF 7 julia

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

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

type mytype{Int64}
    a::Int64
end
Run Code Online (Sandbox Code Playgroud)

这给我一个重新定义的错误mytype.

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

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

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

Seb*_*ood 5

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


Mat*_* B. 5

目前这是不可能的,但该问题在问题#8472中被推测性地提出为"生成类型" .塞巴斯蒂安的答案是一个合理的工作,只要你注意分组mytype构造函数是类型稳定的.有关更完整的示例,请参阅ImmutableArrays.jl如何以编程方式定义抽象ImmutableArray基因座周围的一组类型.