是否可以在 Julia 中声明对任何结构的一般引用?
Is it possible to declare a general reference to any struct in Julia?
我想知道是否可以在结构中实现通用引用。
代码是:
struct Foo1
ia :: Int
end
struct Foo2{UNKNOWNTYPE}
ref :: UNKNOWNTYPE
ib :: Int
function Foo2{UNKNOWNTYPE}(ref::UNKNOWNTYPE,ib::Int)
o = new{UNKNOWNTYPE}(ref,ib)
return o
end
end
foo1 = Foo1();
foo2 = Foo2{Foo1}(foo1,1)
在上面的代码中,struct Foo2 中的变量ref
的类型直到运行 时才确定。上面的代码不起作用,它显示:"LoadError("main.jl", 6, UndefVarError(:UNKNOWNTYPE))".
您基本上只是在构造函数定义中缺少 where UNKNOWNTYPE
。我建议像这样
为 Foo2
使用外部构造函数
julia> struct Foo1
ia::Int
end
julia> struct Foo2{T}
ref::T
ib::Int
end
julia> Foo2(ref::T, ib::Int) where T = Foo2{T}(ref, ib)
Foo2
julia> Foo2(Foo1(1), 1)
Foo2{Foo1}(Foo1(1), 1)
但内部构造函数也可以工作:
julia> struct Foo3{T}
ref::T
ib::Int
function Foo3(ref::T, ib::Int) where T
return new{T}(ref, ib)
end
end
julia> Foo3(Foo1(1), 2)
Foo3{Foo1}(Foo1(1), 2)
我想知道是否可以在结构中实现通用引用。 代码是:
struct Foo1
ia :: Int
end
struct Foo2{UNKNOWNTYPE}
ref :: UNKNOWNTYPE
ib :: Int
function Foo2{UNKNOWNTYPE}(ref::UNKNOWNTYPE,ib::Int)
o = new{UNKNOWNTYPE}(ref,ib)
return o
end
end
foo1 = Foo1();
foo2 = Foo2{Foo1}(foo1,1)
在上面的代码中,struct Foo2 中的变量ref
的类型直到运行 时才确定。上面的代码不起作用,它显示:"LoadError("main.jl", 6, UndefVarError(:UNKNOWNTYPE))".
您基本上只是在构造函数定义中缺少 where UNKNOWNTYPE
。我建议像这样
Foo2
使用外部构造函数
julia> struct Foo1
ia::Int
end
julia> struct Foo2{T}
ref::T
ib::Int
end
julia> Foo2(ref::T, ib::Int) where T = Foo2{T}(ref, ib)
Foo2
julia> Foo2(Foo1(1), 1)
Foo2{Foo1}(Foo1(1), 1)
但内部构造函数也可以工作:
julia> struct Foo3{T}
ref::T
ib::Int
function Foo3(ref::T, ib::Int) where T
return new{T}(ref, ib)
end
end
julia> Foo3(Foo1(1), 2)
Foo3{Foo1}(Foo1(1), 2)