通过封送处理在Ruby中克隆不起作用

通过封送处理在Ruby中克隆不起作用,ruby,marshalling,deep-copy,Ruby,Marshalling,Deep Copy,我正在为我的一门课自学Ruby,我不能对我遇到的bug掉以轻心。注意:我没有要求任何人为我做我的项目;我只是想知道是否有人能给我提供这方面的见解 要点: 存在一个Set类,它有一个订户元素数组 Subscriber类读入.csv文件,并将新的Subscriber对象推送到Set对象的Subscriber数组中 我试图找到任意两个集合的并集和交集 使用封送处理,我能够让union方法工作,但是按照相同的设计,我无法让交叉点逻辑工作 集合类的deepCopy方法: def deepCopy(to

我正在为我的一门课自学Ruby,我不能对我遇到的bug掉以轻心。注意:我没有要求任何人为我做我的项目;我只是想知道是否有人能给我提供这方面的见解

要点:

  • 存在一个Set类,它有一个订户元素数组
  • Subscriber类读入.csv文件,并将新的Subscriber对象推送到Set对象的Subscriber数组中
  • 我试图找到任意两个集合的并集和交集
  • 使用封送处理,我能够让union方法工作,但是按照相同的设计,我无法让交叉点逻辑工作
集合类的
deepCopy
方法:

def deepCopy(toCopy)
  Marshal.load(Marshal.dump(toCopy))
end
Set类的
union
方法(此方法有效):

设置类的
交叉点
方法(此方法无效):

def交叉口(set2)
intersectionSet=Set.new
comparisonSet=Set.new
otherSet=Set.new
#为比较集选择最小的集
如果@subscribers.size

这是一个相当基础的项目,但是学习Ruby的细微差别让它变得相当困难。我甚至试着在
intersection
方法中克隆
self
,就像我在
union
中做的那样,但那也不起作用。这让我想知道这是否是某种记忆问题

您没有在此处初始化集合:

  if @subscribers.size < set2.subscribers.size
    comparisonSet.deepCopy(self)
    otherSet.deepCopy(set2)
  else
    comparisonSet.deepCopy(set2)
    otherSet.deepCopy(self)
  end
然后,您可以执行以下操作:

comparison_set = self.deep_copy
other_set = set2.deep_copy
您当前的实现与union一起工作,因为union集从一个空集开始,接收您抛出的每个订阅者


顺便说一下,我不确定你是否需要在这里复印。看来你没有它也行。当然,我还没有看到你的全部代码。

你没有在这里初始化你的集合:

  if @subscribers.size < set2.subscribers.size
    comparisonSet.deepCopy(self)
    otherSet.deepCopy(set2)
  else
    comparisonSet.deepCopy(set2)
    otherSet.deepCopy(self)
  end
然后,您可以执行以下操作:

comparison_set = self.deep_copy
other_set = set2.deep_copy
您当前的实现与union一起工作,因为union集从一个空集开始,接收您抛出的每个订阅者


顺便说一下,我不确定你是否需要在这里复印。看来你没有它也行。当然,我还没有看到您的全部代码。

我建议您将问题简化为最简单的可重复部分,并相应地调整您的问题。您的代码示例不完整,没有得到充分的解释。@您是否发现某些特定的内容模糊不清?我试图避免发布整个源代码,我建议将您的问题减少到最简单的可复制部分,并相应地调整您的问题。您的代码示例不完整,没有得到充分的解释。@您是否发现某些特定的内容模糊不清?我试图避免发布整个源代码
comparison_set = self.deep_copy
other_set = set2.deep_copy