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'  

上記のコードを1つずつ実行すると。これらの値はすべて、このメソッドに追加する必要があります。

 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 を使用できます。

これは、ディクショナリを含む単一のインスタンス変数を含むヘッダー クラスを定義することで実行できます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 に答える