Java有:Scala如何在方法定義中接收多個參數?
public void someMethod(int ... intArray) { // question: what is the equivalent to "..."
// do something with intArray
}
我怎麼能實現在Scala中相同的功能?也就是說,將一個未定義數量的參數傳遞給一個方法?
Java有:Scala如何在方法定義中接收多個參數?
public void someMethod(int ... intArray) { // question: what is the equivalent to "..."
// do something with intArray
}
我怎麼能實現在Scala中相同的功能?也就是說,將一個未定義數量的參數傳遞給一個方法?
def someMethod(values : Int*)
給出一個數組。將可變參數參數作爲最後一個形式參數。
感謝,作品像一個魅力! – dankilman 2009-09-17 13:16:43
不是scala中的數組。 – 2017-08-31 01:11:17
Java和Scala都有可變參數,兩者都只支持最後一個參數。
def varargTest(ints:Int*) { ints.foreach(println) }
從this article,不同的是在用於可變參數參數的類型:
'*'代表0個或多個參數。
注:如果參數值已經 「打包」 爲一個序列,比如列表,它失敗:
# varargTest(List(1,2,3,4,5))
# //--> error: type mismatch;
# //--> found : List[Int]
# //--> required: Int
# //--> varargTest(List(1,2,3,4,5))
# //-->
但這會通過:
varargTest(List(1,2,3):_*)
//--> 1
//--> 2
//--> 3
'_
' 是類型推斷的佔位符快捷方式。 '_*
'在這裏適用於'重複類型。
的Scala Specification第4.6.2節中提到:
的參數部分的最後值參數可以由「
*」
,例如爲後綴(..., x:T *)
。
該方法內部的這種重複參數的類型是 序列類型scala.Seq[T]
。
重複參數T*
的方法採用可變數量的參數類型T
。
(T1, . . . , Tn,S*)U => (T1, . . . , Tn,S, . . . , S)U,
唯一的例外是,如果最後一個參數被標記爲通過
_*
類型註釋的序列參數。
(e1, . . . , en,e0: _*) => (T1, . . . , Tn, scala.Seq[S]).
注之二:提防的Java的基本類型擦除:
//--> error: double definition:
//--> method varargTest:(ints: Seq[Int])Unit and
//--> method varargTest:(ints: Int*)Unit at line 10
//--> have same type after erasure: (ints: Sequence)Unit
//--> def varargTest(ints:Seq[Int]) { varargTest(ints: _*) }
你能指出我對':_ *'是什麼意思的解釋嗎? – IttayD 2009-10-14 07:35:56
這就是所謂的 「可變參數」(爲:可變參數)。嘗試搜索「scala varargs」。 – Jesper 2009-09-17 14:22:02
只是爲了google的緣故,...是一個elipsis – daveb 2009-09-17 20:34:00
我需要帶有'by-name'變量的可變參數。看來,目前不能完成:http:// stackoverflow。com/questions/2707186/by-name-repeated-parameters – akauppi 2013-03-31 10:34:31