8

scala-arm プロジェクトでは、次のようなコードが表示されます。

def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener)

誰かが [A : Resource : Manifest] の意味を説明できますか?

4

2 に答える 2

18
def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener)

意味

def managed[A](opener : => A)(implicit r: Resource[A], m: Manifest[A]) : ManagedResource[A] = new DefaultManagedResource(opener)

詳細については、リンク テキスト 7.4 コンテキストの境界とビューの境界を参照してください。

于 2010-09-26T15:18:51.997 に答える
4

より簡単な例を使用して説明します。

def method[T : Manifest](param : T) : ResultType[T] = ...

表記T : Manifestは、コンテキストにバインドされていることを意味します。プログラムの他の場所では、スコープ内でManifest[T]、暗黙としてマークされたタイプのシングルトンまたは値を定義する必要があります。

これは、コンパイラが2番目の(暗黙の)パラメータブロックを使用するようにメソッドシグネチャを書き換えることによって実現されます。

def method[T](param : T)(implicit x$1 : Manifest[T]) : ResultType[T] = ...

例が示すように、同じメソッドシグニチャで複数のコンテキスト境界を使用できます。それらをビュー境界と組み合わせることも可能です。

于 2010-09-27T10:11:44.790 に答える