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