我正在 Pharo 中开发一个简单的棋盘游戏,我的棋盘上有一个方法可以将对象添加到单元格中。单元格只是对象上的点字典。
作为该方法的一部分,我想强制 Point 应该大于零,但小于板的宽度和高度,换句话说,它实际上应该在板上。做这个的最好方式是什么?
我目前的尝试如下所示:
at: aPoint put: aCell
((((aPoint x > self numberOfRows)
or: [aPoint x <= 0])
or: [aPoint y > self numberOfColumns ])
or: [aPoint y <= 0])
ifTrue: [ self error:'The point must be inside the grid.' ].
self cells at: aPoint put: aCell .
所有这些括号有点口齿不清!or:
但是我不能在不关闭每个表达式的情况下使用短路,因此它的计算结果是布尔值而不是块(或or:or:or:or:
消息)。我可以改用二元运算符|
并进行短路,但这似乎不对。
那么处理这个问题的正确的 Smalltalk 方式是什么?