我目前正在上的一门课要求我们在 smalltalk 中完成所有编码(这是一个设计课)。在我们的一个项目中,我想做一些事情,但很难找到如何去做。似乎大多数人所做的就是修改他们自己的 smalltalk 版本来做他们需要做的事情。我不能随意这样做,因为当他没有与我相同的内置方法时,这会导致我教授的计算机出现错误。
这是我想要做的:
随机数。我需要在 1 到 1000 之间创建一个随机数。现在我正在通过这样做来伪造它
rand := Random new.
rand := (rand nextValue) * 1000.
rand := rand asInteger.
这给了我一个 0 到 1000 之间的数字。有没有办法在一个命令中做到这一点?相似
Random between: 0 and: 1000
和/或语句。这个让我感到厌烦。我尝试了几种不同的配置
(statement) and: (statement) ifTrue...
(statement) and (statement) ifTrue...
所以我用嵌套的 ifTrue 语句来伪造它:
(statement) ifTrue:[
(statement) ifTrue:[...
在smalltalk中做和/或随机的正确方法是什么?
最佳答案
问题是
(expr) and: (expr) ifTrue: aBlock
被解析为方法
and:ifTrue:
如果您查看 Boolean 类(特别是 True 或 False),您会注意到 ifTrue: 只是一个常规方法,并且没有方法 and:ifTrue: 存在 - 然而,简单的 and: 确实存在。所以为了明确这是两条消息,写((expr) and: (expr)) ifTrue: aBlock
对于更长的 bool 组合,请注意还有方法 and:and: 和 and:and:and: 已实现。
关于random - 如何在 Smalltalk 的范围内生成随机整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/271394/