は、私はコンパイルエラーを持っていません。しかし、implicitly[ClassTag[T]]
呼び出しでタイプClassTag[T]
のオブジェクトが見つかるのはなぜ分かりませんか?私がしたのはジェネリック型引数を提供することだけでした。 ClassTag[Int]
はどこから来たのですか?[ClassTag [T]]が暗黙的に解決するのはなぜですか?</p> <pre><code>object App { def main(args: Array[String]) = { test[Int]() } def test[T <: Int : ClassTag]() = println(implicitly[ClassTag[T]]) } </code></pre> <p>プログラムプリント<code>Int</code>次の最も単純な例で
1
A
答えて
2
:
シンボルは、コンテキストバインドを定義しています。つまり、コンパイラは暗黙のスコープでClassTag[T]
というインスタンスを持つ必要があります。これは、次のシンタックスシュガーです:
def test[T <: Int]()(implicit $ev: ClassTag[T]) = println(implicitly[ClassTag[T]])
implicitly
への呼び出しは、必要なインスタンスとして$ev
がかかります。
しかし、これはもちろん、質問をもう少しプッシュします:$ev
(証拠)はどこから来たのですか? (TypeTag
を参照するが、同じことがClassTag
に適用されます)the Scala documentationを引用すると:
は[T:TypeTag]バインド状況を考えると、コンパイラは単にタイプTypeTag [T]の 暗黙のパラメータを生成し、書き換えますメソッドを に変更すると、前の セクションの暗黙的なパラメータの例のようになります。
関連する問題
- 1. self.class_eval << DEF ... DEF
- 2. は、私は、これはTであっても</p> <pre><code>f(List(1,2,3), "this is a string") </code></pre> <p>ため、エラーなしで動作し、次の関数に</p> <pre><code>def f[T](l:List[T], v:T) </code></pre> <p>を持って、正確にT
- 3. "def <=>"対 "def method_missing"
- 4. def myobject.mymethとクラス<< myobjectの違い。 def mymeth
- 5. が暗黙的に<T>
- 6. Scalaの暗黙的な変換は、私は<code>Map</code>が<code>java.utils.Properties</code>に変換暗黙的になりたいsutiableターゲット
- 7. Scalaのタイピング私は、例えば、</p> <pre><code>abstract class ResultProvider[+T: Writes](db: DB) { def get(id: Long): Future[Seq[T]] } </code></pre> <p>そして、いくつかの実装親の一般的なクラスを持っている</p> <p>次構築しようとしている暗黙の
- 8. なぜ[:] = 1は[:] = '1'と根本的に異なるのですか? <code>a</code>が<code>['1']</code>ある最初のケースで</p> <pre><code>a = [] a[:] = '1' </code></pre><p>と</p> <pre><code>a = [] a[:] = 1 </code></pre><p>:
- 9. EF6 - List <Func <T, object>>
- 10. <機能<T, object>>
- 11. CRUDアクションなしでコントローラをルーティングする方法は?</p> <pre><code>class TestsController < ApplicationController def find end def break end def turn end end </code></pre> <p>私はそうのように私の<code>routes.rb</code>ファイルに追加:
- 12. LINQ ToListがここで使用されないのはなぜですか? <code>source</code>が<code>IEnumerable<T></code>ある</p> <pre><code>using(var iterator = source.GetEnumerator()) {...} </code></pre> <p>:
- 13. なぜBufferedReader :: lines()は、Spliterator <T>ではなく、<T>のイテレータ<T>を作成しますか?
- 14. lambdaがcvとrefを削除するのはなぜですか?</p> <pre><code>auto f = [](const T& var){ return var; }; </code></pre> <p><code>f</code>の戻り値の型が<code>T</code>(ない<code>const T&</code>)である理由:
- 15. スカラ:</p> <pre><code>sealed trait baseData { def weight: Int def priority: Int } case class data1(override val weight: Int, override val priority: Int) extends baseData </code></pre> <p>にはどうすればHListに<code>data1</code>を変換し、次のシグネチャを持つ関数を定義します
- 16. なぜ '<<<'フィルタリングはgdbのnullバイトで、 '<()'はしませんか?
- 17. IEnumerable.Empty <T>()で、IEnumerableでないのはなぜですか?<T> .Empty()?
- 18. Scalaのカリングで複数のパラメータリストが必要なのはなぜですか?さ</p> <pre><code>def f(a: Int)(b: Int) = { /* some code */ } </code></pre> <p>そして私は<code>def fWithA = f(a) _</code></p> <p>私の質問のように、部分的にそれを適用することができます:
- 19. operator <<にconstが必要なのはなぜですか?
- 20. Collections.sort()の宣言:</p> <pre><code>public static <T extends Comparable<? super T>> void sort(List<T> list) </code></pre> <p>及びません:<? super T>ではなく<T>
- 21. Ninjectコンテキストは、私は一般的なインタフェース<code>IRepository<T></code>との2つの実装<code>xrmRepository<T></code>と<code>efRepository<T></code></p> <p>を持っているワット/オープンジェネリック
- 22. は、暗黙のうちに、私は<code>Get<int>(Stat);</code>または<code>Get<string>(Name);</code></p> <p>を呼び出すことができます 'T'
- 23. なぜ "1.0" <"-1.0" <"1.1"ですか?
- 24. 私は今、私は$の前に@が最後に出現する位置のインデックスを取得したい</p> <pre><code>$string="abc @def @xyz $ @def @xyz"; </code></pre> <p>のような文字列を持つインデックス
- 25. Perlの文字列の乗算がundefで警告しないのはなぜですか?</p> <pre><code>$foo . '' </code></pre> <p>と</p> <pre><code>"$foo" </code></pre> <p>
- 26. 入力は、私は現在、2つの機能</p> <pre><code>def func1(*args, **kwargs): ... return a,b </code></pre> <p>と</p> <pre><code>def func2(x,y): ... return variables </code></pre> <p>を持っている別の機能
- 27. ストリーム<Object>の代わりに<Set<Object>>
- 28. CSS:私は、次のものがあり、CSSで</p> <pre><code><main> <section> <article></article> <aside></aside> </section> </main> </code></pre> <p>:フレックスボックスは、Firefox
- 29. Iは、単純な分類器</p> <pre><code>struct Clf { x: f64 } </code></pre> <p>クラシファイアを有する。例えば、引数
- 30. なぜ "class << self"式を使用するのですか?
簡単な答えは、ClassTagコンパニオンオブジェクトで定義されています。また、BooleanやCharなどのプリミティブ型の他の定義を見つけることもできます。 – hasumedic