创建一个Message对象,该对象将接受来自方法的值并继续添加它们

时间:2013-01-30 21:36:00

标签: 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:'Subject', with].

我的问题是Workspace

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'

1 个答案:

答案 0 :(得分:4)

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

这可以定义一个包含单个实例变量的Header类,该变量将包含一个Dictionary,例如headerDictionary。必须在类方法new中初始化此var,如下所示:

new

    headerDictionary := Dictionary new.

此时,您的addHeader:email:方法可以简单地将值放在字典中,如果没有if或外部方法(BTW我不会将其称为addHeader:email:,因为例如Subject的值是不是电子邮件,但这些只是花里胡哨的东西):

addHeader: headerName email: aString

    headerDictionary at: headerName put: aString.

以这种方式,在您的工作区中,您可以执行以下行,最后使用包含所需值的hdr中包含的字典:

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