Я работаю над простой настольной игрой в Pharo, и у меня на доске есть метод, который добавляет объекты в ячейку. Клетки - это просто словарь точек на объектах.
Как часть метода, я хотел обеспечить, чтобы точка была больше нуля, но меньше ширины и высоты доски, другими словами, она должна быть на доске. Каков наилучший способ сделать это?
Моя текущая попытка выглядит так:
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-иш способ справиться с этим?