Smalltalk 创建一个消息对象,该对象将接受来自方法的值并不断添加它们

Smalltalk 创建一个消息对象,该对象将接受来自方法的值并不断添加它们,smalltalk,pharo,Smalltalk,Pharo,正在尝试通过方法发送电子邮件。 我有办法 addHeader: headername with: aString |email| email:= aString. 'To'= headername ifTrue[ self message: 'To:', with ]. 'From'= headername ifTrue[ self message: 'From:', with]. 'Subject'= headername ifTrue[ self message:'Subje

正在尝试通过方法发送电子邮件。 我有办法

addHeader: headername with: aString 
|email|
email:= aString.
'To'= headername ifTrue[ self message: 'To:', with ].    
 'From'= headername ifTrue[ self message: 'From:', with].
 'Subject'= headername ifTrue[  self message:'Subject', with].
我的问题是工作空间

addHeader:'To' with:'abcde@gmail.com'. 

addHeader:'From' with:'efg@gmail.com'  
当我一个接一个地执行上面的代码时。所有这些值都应添加到此方法中

 message: aString 
 "Recieves To: abcde@gmail.com"
  ^ message
 "next time when it recieves From: efg@gmail.com. How can i concatenate 
   both earlier String and current String"
如何得到这个结果

'To: abcde@gmail.com
From: efg@gmail.com'

我不确定我是否完全明白你的意图。无论如何,让我们假设您想要发送一封指定发件人、主题等的邮件。有不同的方法可以做到这一点,但在每种情况下都必须在方法的不同调用之间保持状态,这是通过定义实例变量(或更多变量,取决于您选择的方式)来实现的。如果希望保留方法的签名,即继续使用单个方法添加标题的不同部分,则可以使用包含字典的单个var

这可以通过定义包含单个实例变量的Header类来完成,该实例变量将包含字典,例如
headerDictionary
。必须在类方法
new
中初始化此变量,如下所示:

new

    headerDictionary := Dictionary new.
此时,您的
addHeader:email:
方法可以简单地将值放入字典中,如下所示,而无需使用if或外部方法(顺便说一句,我不会将其称为
addHeader:email:
,因为例如Subject的值不是电子邮件,但这些只是铃铛和哨子):

通过这种方式,在您的工作区中,您可以执行以下行,并最终得到hdr中包含的字典,其中包含您想要的值:

hdr := Header new.
hdr addHeader:'To' email:'abcde@gmail.com'.
hdr addHeader:'From' email:'efg@gmail.com'.

我不确定我是否完全明白你的意图。无论如何,让我们假设您想要发送一封指定发件人、主题等的邮件。有不同的方法可以做到这一点,但在每种情况下都必须在方法的不同调用之间保持状态,这是通过定义实例变量(或更多变量,取决于您选择的方式)来实现的。如果希望保留方法的签名,即继续使用单个方法添加标题的不同部分,则可以使用包含字典的单个var

这可以通过定义包含单个实例变量的Header类来完成,该实例变量将包含字典,例如
headerDictionary
。必须在类方法
new
中初始化此变量,如下所示:

new

    headerDictionary := Dictionary new.
此时,您的
addHeader:email:
方法可以简单地将值放入字典中,如下所示,而无需使用if或外部方法(顺便说一句,我不会将其称为
addHeader:email:
,因为例如Subject的值不是电子邮件,但这些只是铃铛和哨子):

通过这种方式,在您的工作区中,您可以执行以下行,并最终得到hdr中包含的字典,其中包含您想要的值:

hdr := Header new.
hdr addHeader:'To' email:'abcde@gmail.com'.
hdr addHeader:'From' email:'efg@gmail.com'.

我已经纠正了两个方法实现中的语法(首先不要大写选择器名称)。但是您的工作区代码段仍然是不完整的,语法方面的。我已经纠正了您的两个方法实现中的语法(首先不要大写选择器名称)。但是您的工作区代码段仍然是不完整的,从语法上讲。