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
函数似乎缺少一个结尾
).最小函数需要什么?我在你问的另一个问题中给了你一个有效的版本。你到底尝试了什么?错误是什么?仅仅从“不工作”中是不可能找出的。