我正在尝试在 Julia 中创建一个链表。
我有:
mutable struct LLNode{T}
x::T
next::Union{LLNode{T},Void}
prev::Union{LLNode{T},Void}
end
mutable struct LinkedList{T}
count::Int
head::Union{LLNode{T},Void}
tail::Union{LLNode{T},Void}
end
现在,上面的代码编译得很好。我也可以运行:
x = LLNode(0,nothing,nothing)
很好。但是当我运行 y = LinkedList(0,nothing,nothing)
时,我收到了 no method matching LinkedList(::Int64, ::Void, ::Void)
错误。是什么赋予了?VERSION
返回 v"0.6.2"
最佳答案
当您编写 LLNode(0,nothing,nothing)
时,Julia 能够确定它需要根据第一个参数的类型构造一个 LLNode{Int}
。但是在 LinkedList(0, nothing, nothing)
中,它实际上没有什么可以继续确定类型参数应该是什么,因此它不知道要构造什么。
相反,您要么需要明确选择您希望 T
是什么:
julia> LinkedList{Int}(0, nothing, nothing)
LinkedList{Int64}(0, nothing, nothing)
或者它可以根据非空参数获取
T
:julia> LinkedList(0, LLNode(0, nothing, nothing), nothing)
LinkedList{Int64}(0, LLNode{Int64}(0, nothing, nothing), nothing)
关于struct - MethodError 调用参数结构的构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50728288/