このArray.fill
メソッドには次のシグネチャがあります。
def fill[T](n: Int)(elem: => T)(implicit arg0: ClassManifest[T]): Array[T]
インスタンスを取得するClassManifest[T]
には、具体的なタイプを知る必要があります。Aは次のClassManifest
ように取得できます。
implicitly[ClassManifest[String]]
AClassManifest
は、すべての具象タイプで暗黙的に使用できます。
エラーが発生した場合implicit
は、typeパラメーターを使用して必要な暗黙をメソッドに追加できます。
def wrap[T](n:Int)(elem: => T)(implicit c:ClassManifest[T], o:Ordering[T])
ClassManifest
自分で紹介したり、紹介したりしなかった場合Ordering
は、ライブラリの作成者が(ほとんどの場合)賢明なデフォルトを提供しています。
メソッドを呼び出す場合wrap
:
wrap(2)(3)
これは次のように拡張されます。
wrap[Int](2)(3)(implicitly[ClassManifest[Int]], implicitly[Ordering[Int]])
ここでカスタムクラスを導入した場合Person
、の暗黙のインスタンスが見つからないためにエラーが発生しますOrdering[Person]
。ライブラリの作成者は、注文方法を知ることができませんでしたPerson
。あなたはこのようにそれを解決することができます:
class Person
implicit val o = new Ordering[Person] { // implement required methods }
wrap(2)(new Person)
Scalaコンパイラーは、暗黙のスコープをさまざまに調べOrdering
ます。通常、このように指定することはありません。詳細については、インターネットで暗黙の解決策を調べることをお勧めします。