从Smalltalk中的OrderedCollection打印

从Smalltalk中的OrderedCollection打印,smalltalk,Smalltalk,我对Smalltalk相当陌生,我一直在研究如何从堆栈中打印元素。我有两个类,一个是使用OrderedCollection创建堆栈的类,它可以工作,另一个是对象子类。对于第二个类,我有两个实例变量name和weight(使用set和get方法)。我需要再做两个方法print和printSpecial。使用get-from-name方法将名称和权重打印输出到同一行的成绩单,但不能使用get-from-weight方法。PrintSpecial与print类似,但重量必须小于100。我试过做打印和打

我对Smalltalk相当陌生,我一直在研究如何从堆栈中打印元素。我有两个类,一个是使用OrderedCollection创建堆栈的类,它可以工作,另一个是对象子类。对于第二个类,我有两个实例变量name和weight(使用set和get方法)。我需要再做两个方法print和printSpecial。使用get-from-name方法将名称和权重打印输出到同一行的成绩单,但不能使用get-from-weight方法。PrintSpecial与print类似,但重量必须小于100。我试过做打印和打印,但没办法。以下是我到目前为止的情况。任何帮助都将不胜感激

name: a
     name := a

name
     ^name

print
     [ Transcript
        show: weight;
        show: name;
        cr ]

printSpecial
    [ weight <= 100 ]
        whileTrue: [ Transcript
            show: weight;
            show: name;
            cr ]
name:a
名称:=a
名称
^名字
打印
[发言稿]
显示:重量;
显示:名称;
[铬]
特殊印刷品

[weight您的
print
printSpecial
方法都将其主体括在方括号中。您应该将其删除。尝试:

print
  Transcript
    show: weight;
    show: name;
    cr

printSpecial
  weight <= 100 ifTrue: [
    Transcript
      show: weight;
      show: name;
      cr]
这样,如果您以后决定改进
print
,则无需将改进内容复制到
printspect

最后,您说您有这些对象的集合,因此您应该有一些方法来枚举它们(例如,通过
do:
)因此,如果实际请求包括打印它们,那么您应该在元素类中实现
print
printspect
,然后在
堆栈
类中实现相同的消息

Stack >> print
  collection do: [:elem | elem print]

Stack >> printSpecial
  collection do: [:elem | elem printSpecial]
我假设保存元素的实例变量名为
collection

甚至更好。您可以在
堆栈中实现
do:
,然后使用
self-do:
,而不是像我上面所做的那样使用
collection-do:

Stack >> do: aBlock
  collection do: aBlock
然后

Stack >> print
  self do: [:elem | elem print]

Stack >> printSpecial
  self do: [:elem | elem printSpecial]

您的
print
printSpecial
方法都将它们的主体括在方括号中。您应该删除它们。请尝试:

print
  Transcript
    show: weight;
    show: name;
    cr

printSpecial
  weight <= 100 ifTrue: [
    Transcript
      show: weight;
      show: name;
      cr]
这样,如果您以后决定改进
print
,则无需将改进内容复制到
printspect

最后,您说您有这些对象的集合,因此您应该有一些方法来枚举它们(例如,通过
do:
)因此,如果实际请求包括打印它们,那么您应该在元素类中实现
print
printspect
,然后在
堆栈
类中实现相同的消息

Stack >> print
  collection do: [:elem | elem print]

Stack >> printSpecial
  collection do: [:elem | elem printSpecial]
我假设保存元素的实例变量名为
collection

甚至更好。您可以在
堆栈中实现
do:
,然后使用
self-do:
,而不是像我上面所做的那样使用
collection-do:

Stack >> do: aBlock
  collection do: aBlock
然后

Stack >> print
  self do: [:elem | elem print]

Stack >> printSpecial
  self do: [:elem | elem printSpecial]

谢谢,这帮了大忙。谢谢,这帮了大忙。