黒猿の家:Scalaのビュー定義

1.概要

前のセクションでは、我々は、マルチセクタの例を見てみましょう

class Pair[T <: Comparable[T]]

我々は新しいペア(4,2)をしようとした場合残念ながら、コンパイラがintのサブタイプが同等でないと文句を言うだろう[int]はあります。そして、java.lang.Integerの異なるパッケージの種類、ScalaのInt型とはComparableを実装していません。しかし、RichIntは隠者をRichIntする[INT]匹敵する、などのIntからの変換を実現し、隠者は、私たちが説明しますバック変換しました

解決策は、このように、「(ビューがバインド)ビューの定義」を使用することです:

class Pair[T <% Comparable[T]]

<%の関係は、Tは隠者Comparableを[T]に変換できることを意味し
ますが、時間をコンパイルした場合、ビューの定義は、コンパイラに警告が表示されます使用して、しかし、歴史の今後の段階の定義Scalaのビュー、オープン-futureオプション。あなたは「型制約(型制約)」を使用することができ、このように、別のビューを定義します

class Pair[T](val first:T,val second:T)(implicit ev:T=> Comparable[T]){
   def smaller = if (first.comparaTo(second) <0 ) first else second
}

図2に示すように、実用的な操作

スカラ座では、マークはあなたが暗黙のうちに別のジェネリックに変換ジェネリックをしたい場合は、使用することができます:[T <%に匹敵[T]]、のInt Scalaの型はComparableインタフェースを実装していないのために、私たちがする必要がありますRichIntにint型の暗黙の型変換

class Pair5[T <% Comparable[T]](val first: T, val second: T) {
  def smaller = if (first.compareTo(second) < 0) first else second
  override def toString = "(" + first + "," + second + ")"
}

object Main5 extends App {
  val p = new Pair5(4, 2)
  println(p.smaller)
}

ます。https://www.jianshu.com/p/5d835a086976で再現

おすすめ

転載: blog.csdn.net/weixin_34389926/article/details/91182525