我正在編寫模仿Set
類的類MyHashSet
。該組的元素被包含爲散列項目{element => true}
。下面是它是如何定義的:在創建類的實例的類中定義方法
class MyHashSet
attr_accessor :store
def initialize
@store = {}
end
def insert(el)
@store.merge!(el => true)
end
def include?(el)
@store[el]
end
def delete(el)
@store.select! {|key,value| key != el}
end
def to_a
@store.keys
end
def self.union(set)
result=MyHashSet.new
result.store=(self.store).merge(set.store)
result
end
end
最後一個方法union
應該是這樣的,如果我鍵入命令:
set1=MyHashSet.new
set2=MyHashSet.new
set1.insert("Mark Hamill")
set1.insert("Harrison Ford")
set1.insert("Anthony Daniels")
set2.insert("Ewan McGregor")
set2.insert("Natalie Portman")
set2.insert("Anthony Daniels")
,然後嘗試計算
set3=set1.union(set2)
我應該得到一個set3
變量,它是MyHashSet
的一個實例,因此它的store
是:
{"Mark Hamill"=>true, "Harrison Ford"=>true, "Anthony Daniels"=>true, "Ewan McGregor"=>true, "Natalie Portman"=>true}
但是,如果我嘗試運行此我得到一個undefined method
錯誤消息:
`<main>': undefined method `union' for #<MyHashSet:0x00000000f4e3b8> (NoMethodError)
我不明白爲什麼Ruby沒有選擇這個方法。
您使用的是**實例調用**類方法**。 – Aetherus