1

尝试通过方法发送电子邮件。我有一个方法

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'
4

1 回答 1

4

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

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

new

    headerDictionary := Dictionary new.

此时,您的addHeader:email:方法可以简单地将值放入字典中,如下所示,无需 if 或外部方法(顺便说一句,我不会调用它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'.
于 2013-01-31T12:21:50.207 回答