我有Object,由两个构造函数
创建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
当我尝试访问nodes[1].right.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
我尝试拨打HuffmanCode(A)
,然后我收到错误,我尝试使用get(node.right).name
,但这不是问候
答案 0 :(得分:2)
您能提供最低限度的工作示例吗?根据您发布的代码,我无法创建您尝试访问的Node
,而且我并不了解您尝试做的事情。
在任何情况下,nodes[1].right
都是Nullable
类型,它不是节点(具有name
属性)。根据{{3}},您应该使用Nullable
访问get()
对象的值,即get(nodes[1].right)
答案 1 :(得分:2)
您应该使用REPL(即Julia终端)来探索您正在创建的对象。以下是像您一样定义Node
类型后的示例会话,就像我在探索Node
对象时在终端中编写它一样。
将来,请报告完全您键入的内容以及完全产生的错误,只需通过复制和粘贴,就像我在此处所做的那样,然后制作您的示例尽可能简单,没有额外的细节,无关紧要。
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"