我正在尝试在 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/

10-12 17:25