Julia 错误:类型Nullable没有字段名

Julia 错误:类型Nullable没有字段名,julia,Julia,在数组中我有一个对象,由两个构造函数创建 type Node name::AbstractString value::Int left::Nullable{Node} right::Nullable{Node} Node(name::AbstractString, value::Int) = new(name, value, Nullable{Node}(), Nullable{Node}()) Node(name::AbstractString, value::Int

在数组中我有一个对象,由两个构造函数创建

type Node
  name::AbstractString
  value::Int
  left::Nullable{Node}
  right::Nullable{Node}

  Node(name::AbstractString, value::Int) = new(name, value, Nullable{Node}(), Nullable{Node}())
  Node(name::AbstractString, value::Int, left::Node, right::Node) = new(name, value, left, right)
end
当我尝试访问
节点[1]时,对.name
会出现一个类似于主题中的错误,但我确定是否存在对象

nodes[1] 
Node("New",15,Nullable(Node("bb",7,Nullable{Node}(),Nullable{Node}())),Nullable(Node("cc",8,Nullable{Node}(),Nullable{Node}())))
我怎样才能修好它

编辑我键入我的全部代码

A = [Node("aa", 11) , Node("bb", 7), Node("cc", 8), Node("d", 11)]

function HuffmanNodes(nodes::Vector{Node})
  while(length(nodes) > 1)
    left = minimal(nodes)
    Left = nodes[left[1]]
    deleteat!(nodes, left)
    right = minimal(nodes)
    Right = nodes[right[1]]
    deleteat!(nodes, right)
    top = Node("New",Left.value+Right.value, Left, Right)
    println(top)
    push!(nodes, top)
    printNodes(top, " ")
  end
end
HuffmanNodes函数的性质与方法

function printNodes(node::Node, str::AbstractString)
  if(node.name != "New")
    string(node.name, str)
    println(string)
  end
  printNodes(node.left.name , string(str , " 0")
  printNodes(node.right.name , string(str, "  1")
end

function minimal(nodes::Vector{Node})
  minnode = Nullable{Node}()
  minnode = nodes[1]
  minval = nodes[1].value
  for f in nodes
    println(f)
    if f.value < minval
      minval = f.value
      minnode = f
    end
  end
  return find(nodes .==minnode)
end
函数printNodes(节点::节点,str::抽象字符串) 如果(node.name!=“新建”) 字符串(node.name,str) println(字符串) 结束 printNodes(node.left.name,字符串(str,“0”) printNodes(node.right.name,字符串(str,“1”) 结束 函数极小值(节点::向量{Node}) minnode=Nullable{Node}() minnode=节点[1] minval=节点[1]。值 对于节点中的f println(f) 如果f.值<最小值 最小值=f.value minnode=f 结束 结束 返回查找(节点==minnode) 结束
我尝试调用
HuffmanCode(A)
,然后我得到了错误,我尝试了
get(node.right).name
,但它不是wokring

你能提供一个最低限度的工作示例吗?从你发布的代码中,我无法创建你试图访问的
节点,我真的不明白你想做什么

在任何情况下,
nodes[1]。right
的类型为
Nullable
,它不是节点(具有
name
属性)。根据,您应该使用
get()
访问
Nullable
对象的值,即
get(nodes[1]。right)
您应该使用REPL(即Julia终端)浏览您正在创建的对象。在像您一样定义了
节点
类型之后,下面是一个示例会话,正如我在终端中浏览
节点
对象时所写的那样

以后,请准确地报告您键入的内容以及由此产生的错误,只需像我在这里所做的那样进行复制和粘贴,并使您的示例尽可能简单,而不需要额外的细节

julia> type Node
              name::AbstractString
              value::Int
              left::Nullable{Node}
              right::Nullable{Node}

              Node(name::AbstractString, value::Int) = new(name, value, Nullable{Node}(), Nullable{Node}())
              Node(name::AbstractString, value::Int, left::Node, right::Node) = new(name, value, left, right)
       end

julia> nodes = [Node("a", 1), Node("a", 2)]
2-element Array{Node,1}:
 Node("a",1,Nullable{Node}(),Nullable{Node}())
 Node("a",2,Nullable{Node}(),Nullable{Node}())

julia> nodes[1]
Node("a",1,Nullable{Node}(),Nullable{Node}())

julia> nodes[1].right
Nullable{Node}()

julia> get(nodes[1].right)
ERROR: NullException()
 in get at nullable.jl:30

julia> nodes[1].right = Node("c", 3)
Nullable(Node("c",3,Nullable{Node}(),Nullable{Node}()))

julia> get(nodes[1])
ERROR: MethodError: `get` has no method matching get(::Node)

julia> get(nodes[1].right)
Node("c",3,Nullable{Node}(),Nullable{Node}())

julia> n = get(nodes[1].right)
Node("c",3,Nullable{Node}(),Nullable{Node}())

julia> n.name
"c"

请确保您的代码格式正确且可读,我对其进行了一点清理,但不能确定它是否仍然是您正在尝试执行的操作(例如,
printNodes
函数似乎缺少一个
结尾
).最小函数需要什么?我在你问的另一个问题中给了你一个有效的版本。你到底尝试了什么?错误是什么?仅仅从“不工作”中是不可能找出的。