2

私は Python から来て、いくつかの構文と規則に頭を悩ませようとしている、Scala の初心者です。以下が機能しない理由が知りたいです。

scala> val tmp = List[Int].apply(1,2,3)
<console>:7: error: missing arguments for method apply in object List;
follow this method with `_' if you want to treat it as a partially applied function
    val tmp = List[Int].apply(1,2,3)

それでも、次のことを行うと、エラーは発生しません。

scala> val tmp = List.apply(1,2,3)
tmp: List[Int] = List(1,2,3)

scala> val tmp = List[Int](1,2,3)
tmp: List[Int] = List(1,2,3)

List[Int].apply()エラーが発生するのはなぜですか?

ご協力いただきありがとうございます!

4

1 に答える 1

12

構文が間違っているためです。に相当するものが必要な場合はList.apply(1,2,3)、次のようにする必要があります。

val tmp = List.apply[Int](1,2,3)

List.apply(1,2,3)Listは、 がコンパニオン オブジェクトを参照しており、オブジェクトにジェネリックを含めることはできません。したがって、ジェネリックをメソッドに配置する必要があります。

参考までに、これは のソース コードで確認できますList

object List extends SeqFactory[List] {
  ...
  override def apply[A](xs: A*): List[A] = xs.toList

と書くList[Int].apply(1,2,3)と、Scala はそれを と解釈し(List[Int]).apply(1,2,3)ます。AndList[Int]は括弧なしであるかのように解釈されます。List[Int]()これは と同等List.apply[Int]です。引数が必要なためapply、Scala は引数がないことを示すエラーを返します。

于 2012-08-09T21:02:11.200 に答える