問題タブ [context-bound]
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.
scala - 上位の種類の型を持つコンテキスト境界の型コンストラクター パラメーターへのアクセス
コンテキスト バウンドで、より高い種類の型の型コンストラクター パラメーターにアクセスすることは可能ですか? 高次の型を取り、コンストラクターパラメーターのインスタンスを返すメソッドを持つ特性を定義しようとしています。
これは、コンテキスト境界に 2 つの型パラメーターを含めることができないというコンパイラ エラーで失敗しますが、型コンストラクター パラメーターにアクセスする別の方法が見つかりませんか?
c#-4.0 - 多重継承の解決(事前に作成されたクラスの場合)
私が必要としているのは、2人の親を持つクラスContextBoundObject
ともう1つのクラスです。
理由ContextBoundOject
:メソッド呼び出しをログに記録するには、にアクセスする必要があります。
作曲はうまくいきますか?現在のところ、ありません(特にタイプは認識されません)。
これを行う他の方法はありますか?はい。ただし、それほど自動化できず、サードパーティのコンポーネントがありません(T4でも可能かもしれませんが、私は専門家ではありません)。
より詳細な説明。
フレームワークの内部動作にアクセスするために、システムクラス(たとえば、およびの親用にすでに(の親である)を持っているものと、持っていないものがあります)を拡張して、メソッド呼び出しをログに記録できるようにする必要がありますMarshalByRefObject
(今のところ、将来は変更される可能性があります)。ContextBoundObject
ServiceBase
FileSystemWatcher
Exception
Timer
この方法を使用する場合、すべてのメソッドにログ呼び出しを追加するのではなく、ログに記録するオブジェクトにクラス名を追加するだけで済みますが、明らかにこれを行うことはできません。
したがって、通常のソリューションであるインターフェイスを試すことができますが、Runを次のように呼び出すと次のようになります。
架空のインターフェイスIServiceBaseを使用すると、タイプServiceBaseがIServiceBaseにキャストできないため、機能しません。これは、どのインターフェイスからも継承されません。例外を除いて、問題はさらに悪化します。throw
から派生した型のみを受け入れますException
。
逆に、IContextBoundObjectインターフェイスを生成することも機能しないようです。ロギングメカニズムはメソッドによって機能しないため、属性といくつかの小さな内部クラスだけを実装する必要はありません(そして、から継承しますContextBoundObject
。からでもMarshalByRefObject
、メタデータは実質的に同じものとして表示されます)。
私が見たところ、fromContextBoundObject
を拡張すると、拡張クラスがProxy
(おそらく、この方法でメソッド呼び出しがSyncProcessMessage(IMessage)を使用するため、インターセプトしてログに記録できるため)、継承なしでそれを行う方法があるか、または可能性がありますロギング呼び出し(T4テキストテンプレートなど)を使用してメソッドを囲むために利用できるコンパイル前またはコンパイル後の手法であるかどうかはわかりません。
誰かがこれを見てみたい場合は、プログラムでカスタマイズされたバージョンのMSTestExtentionsを使用して、(メソッド呼び出しの)ロギングを実行しました。どんなアイデアでも大歓迎です。さらに説明が必要な場合がありますので、お尋ねください。
scala - 再帰的暗黙のためのスプレー json の NPE (コンテキスト バインドの問題?)
おそらく、spray-json でバグを発見したのでしょう。それ自体のタイプのフィールドを持つオブジェクトの json を取得しようとすると、Null Pointer Exception が発生します。例は次のとおりです。
そしてコールスタックはこれです
すっごく自分で修正しようとしましたが、私の Scala の知識はまだ十分ではありません。inner を変換しようとすると、ここでNPE が発生しますTestItem
。write
その時の関数パラメータは ですnull
。
代わりに my Implicit を使用しない理由を説明していただけますか? デバッガーで、暗黙的を使用する代わりに、チェーンの呼び出しが深くなるにつれて変化するwrite
魔法のフィールドの値が含まれていることがわかります。私はそれが何であるかわからない。文脈に縛られた何かのような気がしますが、関連する章を読んでも役に立ちませんでした。evidence$x$y
scala - Scala コンテキスト バインドが予期せず機能しない
ジェネリック Seq がソートされているかどうかをチェックする関数を定義しようとしました。
私はこれを思いついた:
その時点で、コンパイラは「A に対して暗黙的な順序付けが定義されていません」をスローします。
a と b を次のように指定することで、これを回避できます。
その時点で、コンパイラは喜んで関数を受け入れます。
興味深いのは、次の実装がそのまま使用できることです。
私が知る限り、唯一の大きな違いは、部分関数を使用していないことです。
誰でもこの動作を説明できますか?
scala - Scala 型パラメーターに複数のジェネリック型制約を課す
Scala のコンテキスト バインド パターンを使用して、次のことを実行したいと考えています。
これは、係数が a の要素である必要がある多項式クラスRing T
です。この多項式を要素に適用する (評価) 場合、パラメーターの型はx
リングである必要があり、 type の要素は typeT
に暗黙的にキャストできますX
。たとえばT = Double, X = SquareMatrix
。
Scala のジェネリック型パラメーターに複数の型制約を課すにはどうすればよいですか?
scala - Scalaで2つ以上のコンテキストバインドクラスを持つことは可能ですか?
たとえば ClassTag と T の順序付けが必要であることを指定するにはどうすればよいですか?
例
def sort[T: ClassTag <and> Ordering](future: Future[Seq[T]]): Future[Seq[T]]
scala - Scala: 2 番目のコンストラクターでバインドされたコンテキストを明示的に指定する
これが許可される理由:
これはそうではありませんが:
コンパイラ メッセージ:
Foo[O] はパラメータを取らない
コンストラクターで明示的にバインドされたコンテキストを提供する方法はありますか?
scala - 自己参照ビュー/コンテキスト バウンド
以下がビューまたはコンテキストにバインドされているかどうかは、実際には明確ではありません。また、自己参照の側面(モデルの再参照)が何をしているのか明確ではありません;):
「<: Model[M]」の意味についての説明をいただければ幸いです。