Julia 朱莉娅的链表

Julia 朱莉娅的链表,julia,Julia,有人能帮我理解接下来的事情吗 1) 为什么我们在制作链表时需要为将来的结构创建一个新的抽象类? 2) 为什么会有争论呢? 3) 这个接线员是干什么的 你没有。实际上,您可以定义递归结构,就像您发布的一样。嗯,好吧name=Ptr{Uint8}不是正确的语法-而是您想要的name::Ptr{Uint8}。虽然,实际上,您可能只是想要name::String。现在你仍然会遇到麻烦: julia> struct BrokenList name::String

有人能帮我理解接下来的事情吗
1) 为什么我们在制作链表时需要为将来的结构创建一个新的抽象类?
2) 为什么会有争论呢?
3) 这个接线员是干什么的
  • 你没有。实际上,您可以定义递归结构,就像您发布的一样。嗯,好吧
    name=Ptr{Uint8}
    不是正确的语法-而是您想要的
    name::Ptr{Uint8}
    。虽然,实际上,您可能只是想要
    name::String
    。现在你仍然会遇到麻烦:

    julia> struct BrokenList
               name::String
               next::BrokenList
           end
    
    julia> BrokenList("first", BrokenList("last", #= uh, what goes here? =# ))
    
    您需要类型为
    BrokenList
    的东西才能存在……但为了创建一个,您需要一个!因此,一个简单的“out”是允许
    next
    成为列表的另一个节点或最后一个元素的某个占位符
    nothing
    (类型为
    Void
    )是一个简单的选项:

    julia> struct BetterList
               name::String
               next::Union{BetterList, Void}
           end
    
    julia> BetterList("first", BetterList("last", nothing))
    BetterList("first", BetterList("last", nothing))
    
  • T
    不是一个参数;这是一个好主意。当然,我们的
    BetterList
    可以轻松地保存
    Int
    s而不是
    String
    s……因此我们可以使用类型参数根据其保存的值动态参数化类型:

    julia> struct LinkedList{T}
               value::T
               next::Union{LinkedList{T}, Void}
           end
    
    julia> LinkedList("first", LinkedList("last", nothing))
    LinkedList{String}("first", LinkedList{String}("last", nothing))
    
    julia> LinkedList(1, LinkedList(2, nothing))
    LinkedList{Int64}(1, LinkedList{Int64}(2, nothing))
    
  • 您发布的示例代码没有使用
    Union
    s,而是使用抽象类型和子类型来描述具有节点或最终nil元素的可能性<代码>
  • 你没有。实际上,您可以定义递归结构,就像您发布的一样。嗯,好吧
    name=Ptr{Uint8}
    不是正确的语法-而是您想要的
    name::Ptr{Uint8}
    。虽然,实际上,您可能只是想要
    name::String
    。现在你仍然会遇到麻烦:

    julia> struct BrokenList
               name::String
               next::BrokenList
           end
    
    julia> BrokenList("first", BrokenList("last", #= uh, what goes here? =# ))
    
    您需要类型为
    BrokenList
    的东西才能存在……但为了创建一个,您需要一个!因此,一个简单的“out”是允许
    next
    成为列表的另一个节点或最后一个元素的某个占位符
    nothing
    (类型为
    Void
    )是一个简单的选项:

    julia> struct BetterList
               name::String
               next::Union{BetterList, Void}
           end
    
    julia> BetterList("first", BetterList("last", nothing))
    BetterList("first", BetterList("last", nothing))
    
  • T
    不是一个参数;这是一个好主意。当然,我们的
    BetterList
    可以轻松地保存
    Int
    s而不是
    String
    s……因此我们可以使用类型参数根据其保存的值动态参数化类型:

    julia> struct LinkedList{T}
               value::T
               next::Union{LinkedList{T}, Void}
           end
    
    julia> LinkedList("first", LinkedList("last", nothing))
    LinkedList{String}("first", LinkedList{String}("last", nothing))
    
    julia> LinkedList(1, LinkedList(2, nothing))
    LinkedList{Int64}(1, LinkedList{Int64}(2, nothing))
    
  • 您发布的示例代码没有使用
    Union
    s,而是使用抽象类型和子类型来描述具有节点或最终nil元素的可能性<代码>对于(3),手册描述<代码>对于(3),手册描述<代码>