2012-06-22 42 views
1

我試圖讓斯卡拉這個工作可變參數:功能與構造

class MyClass(some: Int, func: AnyRef* => Int) { 
} 

上面的代碼將無法編譯(爲什麼?),但下列情況:

class MyClass(some: Int, func: Seq[AnyRef] => Int) { 
} 

沒關係但是兩個等價物?如果是這樣,那麼我怎樣才能在MyClass內使用func

class MyClass(some: Int, func: (AnyRef*) => Int) 

這兩種形式的func,但是是不一樣的:如果你使用括號

回答

3

第一個(可變參數)的作品。第一個版本採用可變參數輸入,因此您可以將其稱爲func(a,b,c,d),但第二個版本需要Seq作爲輸入,因此您可以將其稱爲func(Seq(a,b,c,d))

比較:

class MyClass(some: Int, func: (AnyRef*) => Int) { 
    def something() = { 
    func("this","and","that") + 2 
    } 
} 

這樣:

class MyClass(some: Int, func: Seq[AnyRef] => Int) { 
    def something() = { 
    func(Seq("this","and","that")) + 2 
    } 
} 
+0

現在,我的問題是什麼是'()'纏繞'AnyRef *'的含義是什麼? – nobeh

+1

它們只是爲了告訴Scala應該充分考慮'AnyRef *'作爲函數的輸入的括號。就像'(1 + 2)* 3'告訴你'1 + 2'應該完全作爲'+'的第一個參數。 – dhg

+0

感謝您的答案。 – nobeh