2012-04-27 18 views
0

私はvisitorパターンを書いており、オーバーライドされたサブクラスと一致しています。私は変数をオブジェクトの設定値に追加して、変更されたオブジェクトを返したいと思います。どのように構文的に行うことができますか?Scalaの条件付きセットに追加

trait PropositionOrderer extends Visitor[Proposition]{ 
    var OurSet = SortedSet[Name] _ 
    override def variable = { 
     _ match { 
     case name => Variable(name)//SortedSet+(name).andThen(Variable(_)) 
     } 
    } 
} 

SortedSet、次に待つに追加void関数のようなチェーンの構文がありますか?私はandThenを使用することができません。私は2つのことをしたいので、それをSetに追加して、変数を返したいと思います。何か案は?

答えて

2

は、私はあなたがこのような何かを意味すると思う:

var ourSet = Set[String]() 
def func(s: String) = 
    s match { 
    case name =>  // a `case` can be followed by multiple statements 
     ourSet += name // first we add `name` to the set 
     name    // the last expression gets passed up to the assignment of x 
    } 
val x = func("test") 
// ourSet is now Set("test") 
// x is now "test" 

match式が一致caseの最後の式と評価されます。ここで一致するcasecase nameです。 case nameブロックの下の最後の式はnameなので、これが完全一致と評価されます。したがって、関数funcは、func("test"). Thus, x is assigned to be "test"を呼び出すとname、つまり"test"を返します。

また、caseブロック内で他の操作を実行することもできます。ここでは、ourSetを変更しています。

+0

ヒルええ、構文はまだ私に混乱していますが、あなたは私のコードのHEAPSをきれいにする手助けをしました。 – Schroedinger

関連する問題