Ich lerne Ruby hier und das ist meine erste Bemühung in OOP und unten ist mein vollständiger Code, der eine Hash-Klasse macht. Ich habe Probleme zu verstehen, was hinter den Kulissen in der Methode passiert. Wenn ich self.to_a.each { |key| joined_set.insert(key) }
zu @store.to_a.each { |key| joined_set.insert(key) }
ändere, wird der Hash joined_set
ein Array von Arrays, die die Schlüssel und Werte von @store
enthalten, während es nur die Schlüssel enthält, wenn ich nur self
und nicht @store
verwende. Wie entsteht diese Diskrepanz? Ist self nicht gleich der Instanzvariable?Ist self nicht gleich der Instanzvariable?
class MyHashSet
def initialize
@store = {}
end
def insert(el)
@store[el] = true
end
def include?(el)
return true if @store[el]
false
end
def delete(el)
if @store[el]
@store.delete(el)
return true
else
return false
end
end
def to_a
@store.keys
end
def union(set2)
joined_set = self.class.new
self.to_a.each { |key| joined_set.insert(key) }
set2.to_a.each { |key| joined_set.insert(key) }
joined_set
end
end
Scheint mir, als ob Sie betrügen, wenn Sie Ruby's 'Hash' verwenden, um einen Hash zu implementieren. Warum sollten Sie sich kümmern, warum benutzen Sie Ruby nicht von Anfang an? – pjs
Beachten Sie, dass das Aussprechen von "self." überflüssig ist, wenn Sie auf Instanzvariablen und Methoden innerhalb der Klasse selbst verweisen. Sie können Ihr 'to_a' direkt aufrufen. – pjs
Durch eine Art Tutorial/Klasse gehen und das haben sie uns zu tun. – Jstuff