Smalltalk 如何将整数打印到成绩单

Smalltalk 如何将整数打印到成绩单,smalltalk,pharo,Smalltalk,Pharo,我试过这个密码 |myNum| myNum := SmallInteger new: 0. Transcript show: (myNum printString). ,但Pharo在运行此代码时崩溃。您不能使用new:创建SmallInteger。您已经有了要打印的号码。它已经是一个小整数了。就像这样使用它: Transcript show: 0 printString “SmallInteger新建:0”不是必需的,因为0已经是SmallInteger 此外,Transcript对象的#

我试过这个密码

|myNum|
myNum := SmallInteger new: 0.
Transcript show: (myNum printString).

,但Pharo在运行此代码时崩溃。

您不能使用
new:
创建SmallInteger。您已经有了要打印的号码。它已经是一个小整数了。就像这样使用它:

Transcript show: 0 printString
“SmallInteger新建:0”不是必需的,因为0已经是SmallInteger

此外,Transcript对象的#show:消息已经向其参数发送了#asString,因此它可以接收任何对象

因此正确的代码应该是:

Transcript show: 0

在您的示例中,有趣的是您发现VM中缺少保护。我们不能防范一切,但我们应该更好地防范这种简单的缺陷。Bug在Spur中得到了修复,Spur是Eliot目前正在编写的下一代虚拟机:Cog-eem.127我认为并非所有的Smalltalk方言都会将#asString发送到参数to#show:,因此发送#asString不会有什么害处。