4

java.util.List があり、それを反復処理したい場合は、ユーザー Scala 構文をインポートします。

import scala.collection.JavaConversions._

java.util.List は暗黙的に scala.collection.mutable.Set に変換されます

( http://www.scala-lang.org/api/current/index.html#scala.collection.JavaConversions%24 )

しかし、この変換はどのように達成されるのでしょうか? パッケージをインポートするだけでオブジェクト タイプを変換できる機能に遭遇したのはこれが初めてなので、私は混乱しています。

4

2 に答える 2

1

既存のクラスにメソッドを「追加」できるパターン「Pimp my library」があります。たとえば、Daniel C. Sobral の回答http://www.artima.com/weblogs/viewpost.jsp?thread=179766、または他の例をグーグルで参照してください。

つまり、暗黙的なメソッドは、目的のメソッドを含むラッパーを返します。

implicit def enrichString(s:String) = new EnrichedString(s)
class EnrichedString(s:String){
  def hello = "Hello, "+s
}

assert("World".hello === "Hello, World")

砂糖で短縮することもできます:

implicit class EnrichedString(s:String){
  def hello = "Hello, "+s
}
于 2013-08-13T17:15:01.207 に答える