Je suis autodidacte Ruby pour l'un de mes cours et ne peux pas envelopper ma tête autour d'un bug que j'ai rencontré. Note: Je ne demande à personne de faire mon projet pour moi; me demandais si quelqu'un pouvait me donner un aperçu sur ceClonage dans Ruby via Marshaling ne fonctionne pas
L'essentiel:
- Il existe une classe Set, qui a un ensemble d'éléments d'abonné
- La classe d'abonné lit dans un fichier .csv et pousse Nouvel objet abonné au tableau d'abonné d'un objet Set
- J'essaie de trouver l'union et l'intersection de deux ensembles
- En utilisant marshaling, j'ai réussi à faire fonctionner la méthode union, mais en suivant la même conception, Je ne peux pas obtenir la logique d'intersection travailler
La méthode de la classe Set deepCopy
:
def deepCopy(toCopy)
Marshal.load(Marshal.dump(toCopy))
end
La méthode de la classe Set union
(cela fonctionne):
def union(set2)
# clone the current set into union set
unionSet = Set.new
unionSet.deepCopy(self)
# iterate through set 2 and append all unique elements to union set
set2.subscribers.each do |sub|
if !unionSet.subscribers.include?(sub)
unionSet.subscribers.push(sub)
end
end
unionSet.printSet
end
La méthode Set classe Intersection
(cela ne fonctionne pas):
def intersection(set2)
intersectionSet = Set.new
comparisonSet = Set.new
otherSet = Set.new
# choose the smallest set for the comparison set
if @subscribers.size < set2.subscribers.size
comparisonSet.deepCopy(self)
otherSet.deepCopy(set2)
else
comparisonSet.deepCopy(set2)
otherSet.deepCopy(self)
end
#PROBLEM: Both statements below print nothing and both say they are empty when checked.
intersectionSet.printSet
comparisonSet.printSet
# iterate through the comparison set and store all commonalities in intersection set
comparisonSet.subscribers.each do |sub|
puts "Looking for #{sub}"
if otherSet.subscribers.include?(sub)
intersectionSet.subscribers.push(sub)
end
end
intersectionSet.printSet
end
end
C'est un projet assez basique, mais apprendre les nuances de Ruby rend la chose plutôt difficile. J'ai même essayé de cloner self
dans la méthode intersection
comme je l'ai fait dans union
, mais cela n'a pas fonctionné non plus. Cela me fait me demander si c'est une sorte de problème de mémoire?
Je recommanderais de réduire votre problème aux parties les plus simples à reproduire et d'ajuster votre question en conséquence. Votre échantillon de code est incomplet, il n'a pas été expliqué correctement. – anothermh
@anothermnh Y at-il quelque chose de spécifique que vous trouvez vague? J'essayais d'éviter d'afficher le code source entier – shanleo1