请解释为什么以下代码是错误的:
powerset
|ps|
ps := Set with: (Set new).
self do: [:item | ps addToPowerSet: item].
^ps
addToPowerSet: elt
| first second third var |
first := self copy.
second := self copy.
third := Set new.
second do: [:item | var := item copy. var add: elt. third add: var.].
^ first addAll: third这两种方法都在Set类中实现。我尝试过调试它,我认为错误就在这里:
second do: [:item | var := item copy. var add: elt. third add: var.].但我不知道到底是什么。
好的,addToPowerSet方法的示例:
让我们假设powerset变量ps是相等的:
{{empty}, {a}, {b}, {a,b}}item = c. addToPowerSet方法应该返回:
{
{empty}, {a}, {b}, {a,b},
{c}, {a, c}, {b, c}, {a,b,c}
}发布于 2013-09-13 14:45:16
不太熟悉堆栈溢出中的格式设置,但是每次调用addToPowerSet:时返回一个新集的问题不是吗?这似乎是可行的:
addToPowerSet: elt
| second third var |
second := self copy.
third := Set new.
second do:
[:item |
var := item copy.
var add: elt.
third add: var].
^self addAll: third发布于 2013-09-04 19:53:08
首先,你的设计有两个问题,你想要的是错误的。
c addToPowerSet在任何对象上工作,就必须将其添加到Object中。c addToPowerSet不引用powerset。您应该做的是创建一个Set的子类,它覆盖add:方法,或者在Set上添加一个方法addToPowerset:,它应该处理接收方不是powerset的情况。
https://stackoverflow.com/questions/18621364
复制相似问题