JavaがありますScalaはメソッド定義で複数のパラメータを受け取る方法を教えてください。
public void someMethod(int ... intArray) { // question: what is the equivalent to "..."
// do something with intArray
}
どのように私はスカラ座で同じ機能を実現することができますか?つまり、定義されていない数のパラメータをメソッドに渡しますか?
JavaがありますScalaはメソッド定義で複数のパラメータを受け取る方法を教えてください。
public void someMethod(int ... intArray) { // question: what is the equivalent to "..."
// do something with intArray
}
どのように私はスカラ座で同じ機能を実現することができますか?つまり、定義されていない数のパラメータをメソッドに渡しますか?
def someMethod(values : Int*)
配列を与えます。可変引数のパラメータを最後の仮パラメータとして置きます。
ありがとうございます、魅力的な作品です! – dankilman
スカラーの配列ではありません。 –
JavaとScalaの両方にvarargsがあり、両方とも最後のパラメータに対してのみサポートされています。 this articleから
def varargTest(ints:Int*) { ints.foreach(println) }
、差は可変引数の引数に使用されるタイプである。スカラのJava
'*'は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
。 「scala varargs」を検索してみてください。 – Jesper
ちょうどGoogleのために、... elipsisです – daveb
私は '名前で'変数とvarargsが必要です。現在は実行できません:http:// stackoverflow。com/questions/2707186/by-name-repeated-parameters – akauppi