分配对象引用而不是对象

时间:2015-10-03 21:24:13

标签: oop julia

我在Julia遇到绑定问题 尝试这样做时:

pytesseract.image_to_string(image,None, False, "-psm 6")
Pytesseract: UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 2: character maps to <undefined>

我想更改父级中儿子的链接,但只有在我执行此操作时才有效:

type Chain
    value :: Int
    son :: Chain

    #Make the last link in the chain point to itself
    #so as to spare us from the julia workaround for nulls
    Chain(value::Int) = (chain = new(); chain.value = value; chain.son = chain; chain)
end

#Create three separate nodes
c=Chain(5)
d=Chain(2)
e=Chain(1)

#Link an object to another and then modify the linked object
c.son = d
son = d.son
son = e
c

这会在递归函数中产生问题,如果将对象传递给链接到另一个对象的函数并在函数体中更改它,则链接不会被更改,只有对象本身。

我尝试过使用julia函数c.son = d d.son = e c ,但这用于处理c函数,而pointer_from_objref赋值则无效。

我如何创建一个变量,当它被分配时也会改变我所指的链接?

1 个答案:

答案 0 :(得分:2)

如果我了解您的属性,您可以将son声明为Array =&gt; son::Array{Chain,1}来实现此目的。

type Chain
    value::Int
    son::Array{Chain,1}
    Chain(value::Int) = (chain = new(); chain.value = value; chain.son = [chain]; chain)
end

julia> c=Chain(5)
Chain(5,[Chain(#= circular reference =#)])

julia> d=Chain(2)
Chain(2,[Chain(#= circular reference =#)])

julia> e=Chain(1)
Chain(1,[Chain(#= circular reference =#)])

julia> c.son = [d]
1-element Array{Chain,1}:
 Chain(2,[Chain(#= circular reference =#)])

julia> son = d.son
1-element Array{Chain,1}:
 Chain(2,[Chain(#= circular reference =#)])

julia> son[:] = e
Chain(1,[Chain(#= circular reference =#)])

julia> c
Chain(5,[Chain(2,[Chain(1,[Chain(#= circular reference =#)])])])

这是因为通过运行son = d.sonson = e,您只需完全更改绑定。

# NOT using array type
julia> son = d.son
Chain(2,Chain(#= circular reference =#))

julia> son = e
Chain(1,Chain(#= circular reference =#))

julia> son === d.son
false

# using array type
julia> son = d.son
1-element Array{Chain,1}:
 Chain(2,[Chain(#= circular reference =#)])

julia> son[:] = e
Chain(1,[Chain(#= circular reference =#)])

julia> son === d.son
true

如果要保留链接,解决方法是使用数组类型并更改数组的内容而不是其绑定。 more details about bindings