我在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
赋值则无效。
我如何创建一个变量,当它被分配时也会改变我所指的链接?
答案 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.son
和son = 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