smalltalk中循环内的条件
我试着用一个循环画一系列符号。我是这样做的,但它总是画smalltalk中循环内的条件,smalltalk,pharo,Smalltalk,Pharo,我试着用一个循环画一系列符号。我是这样做的,但它总是画x圈 1 to: x do: [ (self lastWasSquare) ifTrue: [ self drawCircle] ifFalse: [ self drawSquare] ] 我还尝试: x timesRepeat: [ (self lastWasSquare) ifTrue: [ self drawCircle]
x
圈
1 to: x do: [
(self lastWasSquare)
ifTrue: [ self drawCircle]
ifFalse: [ self drawSquare]
]
我还尝试:
x timesRepeat: [
(self lastWasSquare)
ifTrue: [ self drawCircle]
ifFalse: [ self drawSquare]
].
但仍在画圈。我还试图通过向循环中添加一个:n |
变量,并询问是否偶数,但同样,它总是执行循环代码来实现这一点。
我做错了什么?
谢谢你看起来你对
self lastwasquare
的调用一直在返回true
,因此你的#ifTrue:ifFalse:
一直进入调用self drawCircle
的块。您可以:
drawCircle
和drawSquare
方法正确设置了lastwasquare
实例变量(至少我假设这只是一个getter方法)lastwasquare
值,那么第一种方法会更好。第二种方法更好,如果它是您绘制圆或正方形的唯一位置(保持范围尽可能小),并且可能看起来像这样:
| lastWasSquare |
lastWasSquare := false.
x timesRepeat: [
lastWasSquare
ifTrue: [ self drawCircle ]
ifFalse: [ self drawSquare ].
lastWasSquare := lastWasSquare not
].
因此,您不断在true
和false
之间切换lastwasquare
,它将绘制交替的形状。(我假设当你说“画一条符号链”时,这就是你想要达到的目标…)
如果两者都不适用,那么,正如Uko在评论中所说,您需要发布更多的代码,以便我们能够帮助您。代码对我来说似乎很好,而且
x timesRepeat:
在您不需要索引时更好。你能告诉我们其他三种方法的代码吗?您还可以尝试将self-halt
作为循环的第一条语句,或放在条件块内部。这将作为一个断点,因此您可以检查self-lastwasquare
的结果是什么,为什么会是这样,然后self-drawCircle
和self-drawSquare
执行一些副作用,这将导致self-lastwasquare
给出不同的结果?如果不知道这些选择器的代码是做什么的,就不可能告诉您为什么您的代码没有按预期运行。@Lowerer eek,绝对正确,谢谢。。。编辑。这就是我在没有在工作区中实际尝试的情况下直接输入的结果