問題タブ [reification]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
generics - Scala のマニフェストの制限は何ですか?
Scala のManifest
は、具体化されたジェネリックが JVM にないことによる型消去の問題を回避する方法です。
それらは他のいくつかの質問で議論されています。ここにいくつかあります:
- Scala のマニフェストとは何ですか?いつ必要になりますか?
- Scala の (2.8) マニフェストはどのように機能しますか?
- Scalaで型消去を回避するにはどうすればよいですか? または、コレクションの型パラメーターを取得できないのはなぜですか?
- Scala のマニフェスト クラスを使用して、消去されたクラスを実行時にインスタンス化するにはどうすればよいですか?
- マニフェストとクラスマニフェスト。この Scala エラーはどういう意味ですか?
コメントの 1 つは、「この機能は実験的なものであり、動作しない場合があります。それでも、それは長い道のりを歩むことができます。」(ダニエル・ソブラル)
マニフェスト アプローチが失敗するケースとその理由は何ですか?
scala - Scalaの場合、型消去に利点はありますか?
どういうわけか具体化を実装することを提案している、まだベーパーウェアモードのさまざまなJVM言語について多くのことを聞いてきました。私はこのしつこいことを半分覚えています(または完全に想像しましたが、どちらかわかりません)。ScalaがJVMの型消去を利用して、具体化ではできないことを実行したことをどこかで読んだと思いました。ScalaはJVMだけでなくCLRにも実装されているため、これは私にはあまり意味がありません。したがって、具体化によって何らかの制限が発生した場合、CLR実装に表示されます(CLR上のScalaが具体化を無視している場合を除く) 。
それで、Scalaの型消去には良い面がありますか、それとも具象化は軽減されない良いことですか?
javascript - Javascriptにないキャプチャメソッドといくつかのロジックを実行しますか?
Rubyでは、欠落しているメソッドの呼び出しをキャプチャして、その場で定義できます。
JavaScriptで達成したいのは、メソッドのないオブジェクトを作成することです。欠落しているメソッドをemit()の呼び出しに変換したい:
実行時に(固定リストから)すべてのメソッドを定義するよりも、欠落しているメソッドエラーをキャプチャしてemit(methodName)を実行する方が良いと思います。そうすれば、オブジェクトに数百または数千のイベントがある場合でも、パフォーマンスのオーバーヘッドが発生しません。
これを行うための最良の方法は何ですか?
更新:これはAPI設計であるため、次のことは避けてください。
ユーザーが通常どおりメソッドを使用できるように、これを舞台裏でどのように実行できるかを知りたいです。
scala - Scala での汎用イベント ハンドラーのオーバーロード
次の汎用イベント ハンドラーを定義すると、
イベントタイプはこのようなものです
これらのイベントごとにイベント ハンドラーを実装する単一のクラスを作成するにはどうすればよいでしょうか。私は試した:
しかし、Scala は、トレイトを 2 回継承することはできないと文句を言っています。
解決策を示唆するこの回答を見つけましたが、複数のクラス (ハンドラーごとに 1 つ) が必要なようです。これが本当に唯一の方法ですか、それとも単一のクラスに複数の汎用イベント ハンドラーを実装するために使用できる他の Scala コンストラクトがあるのでしょうか (つまり、ケース クラス、マニフェスト、またはその他の派手なコンストラクトを使用します)。
reflection - 引用、具体化、反省の関係
私は最近、引用、具体化、反省について混乱しています。誰かが彼らの関係と違い (もしあれば) について良い説明を提供できますか?
scala - TypeTag とは何ですか? どのように使用しますか?
TypeTags について私が知っているのは、それらがどういうわけかマニフェストを置き換えたということだけです。インターネット上の情報は少なく、私にはこの主題についての良い感覚が得られません。
ですから、例や一般的な使用例など、TypeTags に関する有用な資料へのリンクを共有していただければ幸いです。詳細な回答と説明も大歓迎です。
scala - reify のマクロ展開中の StackOverflowError
reify を使用する簡単なテスト マクロがあります。マクロ展開時に StackOverflowError が発生します。
なぜこれが起こるのですか?どうにか回避できないでしょうか?
編集: これは M6 で起こることです。M7で試してみたところ、次のように表示されます
実装制限: 型 Object{def (): O.type} (ClassInfoType) を具体化できません
これで理由の質問に答えましたが、これを回避する方法があるかどうかという質問はまだ残っています。
scala - Scala式の具体化はv2.9で機能しますか?
私はscalaリフティングで遊んでいましたが、Scalaがラムダ式を暗黙的にサポートしているように見えることを偶然発見しました。
astの右側にはラムダのASTがあります。
リテラルでは機能しないようですので、次のようにします。
動作しません。
しかし、これはします:
そのためのドキュメントが見つからないようです。暗黙の変換がアクティブになっていないようです。これはどのように作動しますか?
c# - 非ジェネリック クラスの C# ジェネリック メソッドは何に帰着しますか?
このようなクラスがある場合: -
この例では、すべてのタイプに ToString() があるなどの理由で T を使用する必要がないことはわかっています。これは単なる不自然な例です。私がもっと興味を持っているのは、次の観点からボンネットの下で何が起こるかです: -
私は広く(考えてください!)具体化を理解しています。つまり、さまざまなタイプのジェネリッククラスを作成する場合などです。
など。その後、コンパイル時 (または実行時?) に、指定されたジェネリック引数ごとに 1 つずつ、3 つの実際の具象型になります。最初の例のメソッド呼び出しにも同じことが当てはまりますか。つまり、単一のクラス Foo があり、具体化された 3 つの Bar メソッド (1 つは String、Int32、および Employee) でしょうか?
scala - 型の制約と、どちらかの joinLeft に関する具体化
joinLeft
と定義されている:
- と が既知の
A
場合B
、 が必要implicit ev: A1 <:< Either[C, B1]
です- 制約 を満たします
A1 >: A, B1 >: B
。 - 具体化する
A1 <: Either[C, B1]
- 制約 を満たします
- そのためには、暗黙的
conforms[A1]
およびconforms[Either[C, B1]]
私が今でも正しければ、 と の下限を超えている限り、 と には多くの選択肢があるように思えA1
ます。だから私はscalaが私たちに and (そしてそれらが何であるか) を与える方法を知りたいと思っています.B1
A
B
A1
Either[C, B1]
conforms
<:<
A1 <: Either[C, B1]
PS
この質問は、私の別の質問 " joinLeft [A1 >: A, B1 >: B, C]... なぜ型制約 A1 >: A および B1>: B が必要なのですか? " に多少関連していると思います。どなたでもご覧いただけますと幸いです。