cai*_*sah 3 smalltalk gnu-smalltalk
我正在读一本关于Smalltalk的书,我正在练习关于我无法解决的消失元素的异常.
Object subclass: Book [
| isbn |
<comment: 'A book class'>
setIsbn: anIsbn [
isbn := anIsbn.
]
getIsbn [
^isbn.
]
= anotherBook [
^self getIsbn = anotherBook getIsbn.
]
]
| Library |
Library := Set new: 100.
Library add: (Book new setIsbn: '0-671-2-158-1').
(Library includes: (Book new setIsbn: '0-671-2-158-1')) printNl.
Run Code Online (Sandbox Code Playgroud)
我读过我也要覆盖这个hash
方法,但我不知道怎么做.如何修改Book
课程以避免异常?
我无法确切地告诉你你在问什么,但是为了覆盖哈希,你应该做同样的事情=
,你已经覆盖了,只是通过包含不同的定义.所以你做的事情如下:
hash [
"return hash here"
]
Run Code Online (Sandbox Code Playgroud)
如果你在问什么哈希应该是这样的...好好想想它:相同的对象必须具有相同的哈希值(但这不必相反).所以我建议你做点什么
hash [
^ self getIsbn hash
]
Run Code Online (Sandbox Code Playgroud)
关于消失的元素.Set是一个哈希集合.这意味着在将它的元素与您要查找的元素进行比较之前,它会通过哈希选择一个子集.因此,如果您没有覆盖哈希,则可以选择不包含所需元素的子集.
最后我建议你使用一些不同的Smalltalk实现,因为当我开始用gnu-smalltalk学习它时,我的头部受伤了.Personaly我使用pharo它提供了一个很好的用户界面,让你看到你覆盖的内容,允许你调试等.