2012-04-27 28 views
0

我已經編寫了一個訪問者模式,並且匹配了重寫的子類。我想將變量添加到對象的設置值,然後返回修改後的對象。我怎樣才能在語法上做到這一點?在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,因爲我想做兩件事,我想將它添加到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 namecase name區塊下的最後一個表達式是name,所以這就是整個比賽評估的結果。所以功能func返回name,當我們呼叫func("test"). Thus, x is assigned to be「測試」時,它是"test"

另外,您可以在需要的case塊內執行任何其他操作。在這裏,我們正在修改ourSet

+0

地獄是啊,語法仍然有點讓我困惑,但你已經幫我清理了我的代碼的HEAPS。 – Schroedinger 2012-04-27 04:31:23