Smalltalk 成绩单显示不';行不通

Smalltalk 成绩单显示不';行不通,smalltalk,pharo,Smalltalk,Pharo,我正在用pharo smalltalk制作一个链表结构,我试图打印我的列表以获得一个概览,我使用了“Transcript show:”方法,但它不起作用,它在转录本上打印“元素”(列表中对象的名称),当我在工作区上单独使用它打印“3”或“hello”时,例如,它工作得非常好。我读过很多类似的话题,但这并不能解决我的问题: 这是我的密码: printList |current| current := Element newElement: first. [ c

我正在用pharo smalltalk制作一个链表结构,我试图打印我的列表以获得一个概览,我使用了“Transcript show:”方法,但它不起作用,它在转录本上打印“元素”(列表中对象的名称),当我在工作区上单独使用它打印“3”或“hello”时,例如,它工作得非常好。我读过很多类似的话题,但这并不能解决我的问题: 这是我的密码:

    printList
     |current|
     current := Element newElement: first.
     [ current  == nil ] whileFalse: [ Transcript show: (current getValue); cr.
                                        current := current getNext ].

谢谢!:)

看起来您的代码正在工作,当它试图将元素打印到转录本时,它称为element>>asString。由于您的对象没有实现此方法,因此它会退回到继承的object>>asString方法,该方法试图变得更聪明,并使用生成“元素”的默认模式

解决方案很简单-只需在元素类中自己实现asString方法:

asString
    ^'Hello I am an Element'
你可以变得比这更聪明。您通常希望使输出具有唯一的可识别性。如果元素类有一个“name”实例变量,则可以使用该变量,例如:

asString
    ^(name ifNil: ['(empty)']), ' Element'
这将打印如下内容:

MyName元素


当前getValue的结果是什么?可能您忘记了在
getValue
方法中返回值,因此您正在打印打印打印“元素”的
current
本身。或者,您可能需要添加一个printOn:method,您可以使用它来创建自定义输出,而不是“元素”,它可以是“元素(值)然后,您可以将元素本身发送到transcript“getValue”,在执行transcript show:someList getFirst getValue时返回正确的值。如何添加printOn:method?我应该删除我的printList方法还是保留它?我在这里也很新,所以我刚刚发现stackoverflow会自动建议在适当的时候将对话移动到chat。(还有,你需要20分才能加入聊天)。所以,如果你有问题,请不要担心,继续这里,或者在irc上提问。另外,我建议使用“Transcript crShow:”而不是“Transcript show:”。这将在各自的行上打印每个输出。