Julia 参数类型的自动推理

Julia 参数类型的自动推理,julia,Julia,我正在使用下面的代码,看起来Julia应该能够自己推断类型参数,但事实并非如此。有什么想法吗,也许我做错了什么 abstract type ABS{A,B} end struct MyStruct{A,B,K<:ABS{A,B}} a::A b::B MyStruct{A,B,K}(a::A,b::B) where {A,B,K<:ABS{A,B}} = new(a,b) end MyStruct{Int64,Float64,ABS{Int64,Float

我正在使用下面的代码,看起来Julia应该能够自己推断类型参数,但事实并非如此。有什么想法吗,也许我做错了什么

abstract type ABS{A,B} end

struct MyStruct{A,B,K<:ABS{A,B}}
    a::A
    b::B
    MyStruct{A,B,K}(a::A,b::B) where {A,B,K<:ABS{A,B}} = new(a,b)
end

MyStruct{Int64,Float64,ABS{Int64,Float64}}(1,2.1) # <<-- works
MyStruct(1,2.1) # <<-- doesn't work
抽象类型ABS{A,B}end

struct MyStruct{A,B,K正如@gnimuc所指出的,我忘记了外部构造函数

abstract type ABS{A,B} end
struct Myk <: ABS{Int64,Float64} end

struct MyStruct{A,B,K<:ABS{A,B}}
    a::A
    b::B
    MyStruct{A,B,K}(a::A,b::B) where {A,B,K<:ABS{A,B}}= new(a,b)
end
# this is the outer constructor:
MyStruct(a::A, b::B, ::K) where {A,B,K<:ABS{A,B}} = MyStruct{A,B,K}(a,b)

# now this works:
MyStruct(1,2.1,Myk())
抽象类型ABS{A,B}end

struct Myk与类型推断无关,您只是忘记定义一个适当的外部构造函数,请参见。您希望它如何工作?
K
不是从
a
b
中定义的。它可以选择无限多的可能性,它可能选择正确的(任何抽象类型的子集
ABS{a,B}
)如果其他代码添加了具体类型的
ABS
@gnimum,你是对的。我成功了!