Scalaの暗黙的な変換と暗黙的なパラメータの間には関係がありますか?Scalaの暗黙的な変換と暗黙的なパラメータの関係は何ですか?
さまざまなタイプの暗黙のうちに何があるのか、解決ルールが何であるかを知るのに、私は興味がありません。
私はこれらの2つの概念が同じ名前を持つ理由にのみ興味があります。
Scalaの暗黙的な変換と暗黙的なパラメータの間には関係がありますか?Scalaの暗黙的な変換と暗黙的なパラメータの関係は何ですか?
さまざまなタイプの暗黙のうちに何があるのか、解決ルールが何であるかを知るのに、私は興味がありません。
私はこれらの2つの概念が同じ名前を持つ理由にのみ興味があります。
私の知る限りでは、彼らは同じキーワードを共有する以外の任意の即時関係ありません。
しかし、彼らはのような興味深い方法で組み合わせることができます。
class Foo
class Bar
class FooBar(foo: Foo, bar: Bar)
implicit val foo = new Foo
implicit val bar = new Bar
implicit def fooBar(implicit foo: Foo, bar: Bar): FooBar = new FooBar(foo, bar)
implicitly[FooBar]
implicit conversion
(空想名が、実際のパラメーターを受け入れることを暗黙的に過ぎない)(指定したimplicit val
のようにほとんどが行動するimplicit parameters
を受け入れることができます含意が定義されている)。ブーム。
B
を入力するタイプA
から暗黙変換は暗黙関数A => B
あります。
暗黙のデフは、暗黙的な機能が利用できるようになります:
// two types
class A
class B
// implicit conversion from A to B
implicit def aToB(a: A): B = {
println("aToB");
new B
}
// we now have a Function[A, B] aka A => B in the implicit scope
val f = implicitly[A => B]
f(new A)
> aToB
res1: B = [email protected]
陰関数は、暗黙の型変換が可能になります。
class IntExtension(x: Int) { def isPositive = x > 0 }
implicit val intToIntExtensions: Int => IntExtension = x => new IntExtension(x)
> 1.isPositive
res2: Boolean = true
私はあなたを正しく理解するかどうかを見てみましょう。暗黙的に[A => B]はaToBへの参照を返します。この参照には新しいAを渡すことができ、新しいBを返します。暗黙のvalは暗黙のdefと同じ機能を果たします。しかし、foo(int:Int)(暗黙のbar:Bar)のような暗黙のパラメータを持つ関数はどうでしょうか? –
これは質問に答える:http://stackoverflow.com/questions/5598085/where-does-scala-look-for-implicits –
@ GiovanniCaporalettiそれはどのように質問に答えますか? –
@MichaelLafayette暗黙的な変換と暗黙的なパラメータがどのようなものであるか、コンパイラによってどのように管理されるかについて詳しく説明しています。正直なところ、他に何が追加できるのか分かりません。また、ビューの境界とコンテキストの境界に関連するすべてのものが含まれています。包括的な答えです。 –