我是朱莉娅的新手,我不确定为什么最后一行评估为假:
type Point{T}
x::T
y::T
end
D = [Point(1.,2.) => 42]
haskey(D, Point(1., 2.)) #False!
显然关键存在,所以这里发生了什么!?
修改
如果我不使用课程Point
,它可以正常工作:
D = [(1.,2.) => 42]
haskey(D, (1., 2.)) #True!
我们不能将类用于字典键类型吗?
答案 0 :(得分:6)
但是看看这个:
<a href='#awesome' data-toggle='modal'><input type = 'button' class = 'btn btn-primary' value = 'Click Here' > </a>
.... </html>
<div class='modal fade' id='awesome' role='dialog'>
<div class='modal-dialog' style='width: 600px;'>
<div class='modal-content' style=''>
<div class='modal-header'>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class='modal-body' style = 'height: 500px; background-image:url(bground.jpg); background-repeat: no-repeat; ' >
</div>
<div class='modal-footer'>
<!--<a class="btn btn-default" data-dismiss="modal">Close</a>-->
</div>
</div>
</div>
评估为type Point{T}
x::T
y::T
end
P = Point(1., 2.)
D = [P => 42]
haskey(D, P)
。
如果使用相同的对象,它会起作用,但如果使用具有相同字段值的2个对象,则它不起作用。请注意,使用true
定义的对象是可变的,因此即使您使用type
作为键,您仍然可以在不知道字典的情况下更改其字段的值。字典需要对无法更改的内容进行哈希处理,例如类型对象的标识,而不是当前的字段值。由于元组是不可变的,因此它们的值可以安全地用作键。你也可以使用
Point
答案 1 :(得分:3)
如果您为hash
定义自定义Point
方法,那么事情就会按预期运作。