問題タブ [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 - コンテキストがバインドされたケース クラスにマクロ アノテーションを適用するにはどうすればよいですか?
ケース クラスにマクロ アノテーションを追加しようとすると、次のようになります。
エラーが発生します:
@macid
は、ホワイトボックス StaticAnnotation として定義された単なる恒等関数です。
注釈なしのコードは次のように機能します。
バインドされたコンテキストを削除すると機能します。
何が起こっているかというと、バインドされたコンテキストが非公開パラメーターに脱糖されているということです。次の脱糖コードでも同じエラーが発生します。
動作するコードを取得するために、暗黙のパラメーターを次のように公開しval
ます。
私の質問は次のとおりです。マクロ注釈がコンテキスト境界をサポートする正しい方法は何ですか? コンパイラが、マクロ アノテーションによって生成されたコードに対して非公開パラメーターのケース クラスのチェックを実行するのに、通常のコードのチェックを実行しないのはなぜですか?
Scala バージョン 2.11.7 と 2.12.0-M3 の両方でエラーが報告されます。上記のコード例はすべて、2.11.3 で期待どおりにコンパイルおよび実行されます。
scala - Play アクション コンポジション - パラメータ化されたパーサーのハードコーディング
次のようなアクションを書く定型文を取り除くカスタム アクションを作成したいと思います。
ただし、クラス定義エラーが発生し続けます。これが私の最も成功した試みです:
しかし、次のエラーが表示されます。method composeAction overrides nothing.
変更composeAction[A: Reads]
するcomposeAction[A]
と、タイプ A の Json シリアライザーがないことがわかります。
このカスタム アクションを定義する他の方法はありますか?
scala - トレイトにバインドされた scala コンテキストを定義するための省略形
scala 抽象クラスでは、コンテキスト バウンドを定義したい場合、たとえば [T: ClassTag] をパラメーターで使用できますが、これはトレイトでは不可能です。
次のように定義した場合:
Bar 内で ctg を読み取ろうとすると、暗黙的なパラメーターが末尾再帰になるため、StackOverflowError がトリガーされます。
では、サブクラスをコンテキスト バインドに自動的に公開するトレイトで ctg を定義できるようにする最善の方法は何でしょうか?
scala - Scala の isInstanceOf[T] 関数が境界付き ClassTag/TypeTag を使用できない
次のコード:
コンパイルで次の結果が得られます。
奇妙なことに、大文字と小文字の一致は意図したとおりに機能します。isInstanceOf[T] に ClassTag コンテキストのバインドも認識させる方法はありますか?
scala - 上限とコンテキスト バウンドを同時に使用しようとすると ScalaC 例外が発生する
上限とコンテキスト バウンドを同時に使用しようとすると、scalac 例外が発生します。許可されていますか?私はScala 2.11.8を使用しています
このことを考慮
コンパイル時に私が得る
何が欠けていますか?
更新: 私には魔法のように見えますが、フィールドの位置を変更するとエラーはなくなりますmessage: T
。1 番目または 2 番目の位置にある場合はコンパイルされます。誰でも理由を説明できますか?
scala - Scala: トリプル コンテキスト境界、証拠パラメーターが見つかりません
これを編集して、@Zhi Yuan Wang が回答した質問のより単純な形式にしました。
次のエラーが表示されます。
REPLで次を取得しているにもかかわらず:
Zhiのawserは正しいです。以下がコンパイルされます。
ただし、これらは2つの異なるメソッドのパラメーターであり、メソッドは通常パラメーター名を再利用できるため、これはまだ正しい動作とは言えません。
scala - Scala - サブコンテキスト バインド メソッドを使用して trait メソッドをオーバーライドする
為に
これはビルドしません。エラー:
エラー:(15, 7) タイプ [U <: users.User](u: U)Boolean の特性 AuthUserObject でメソッド authorize をオーバーライドしています。メソッド authorize には互換性のない型があります def authorize[T <: Trader](t: T): Boolean ^
トレーダーのみが税金を支払うため、ユーザーに限定AuthTraderObject
する必要があります。Trader
このオーバーライドはどのように可能ですか?
scala - 「C: ClassTag : Manifest」のようなジェネリック型の意味は何ですか?
次のようなスニペットを見つけました。
ジェネリック型のような意味は何C: ClassTag : Manifest
ですか?
scala - 指定されたコンテキスト バインドを使用して、ネストされたリストに消去を入力します
Scala with Catsという本を読んでいます。scala 型システムの機微を理解しようとしています。次の例を思いつきました。
これはコンパイルされず、次のエラーが表示されます。
タイプ Example.Serializer[Any] の証拠パラメーターの暗黙的な値が見つかりませんでした
なぜこれが起こるのか理解できました。それは私の関数f1によるものです。List[Int] と List[String] を関数に渡したので、共通の親の型は Any です。そのため、タイプ情報が消去され、シリアライザーに渡されます。
ただし、コンテキストをバインドした場合、コンパイラはこれが行われる前に暗黙の定義を最初に探すべきではありませんか? 明らかにそうではないので、私の理解は間違っています。この問題を回避する Scala の方法は何ですか。
どんな説明でも大歓迎です!
scala - 2つの定義の違いは何ですか
2つの定義の違いは何ですか?
def f[F[_]: Async](...) = ???
def f[F[_]](...)(implicit F: Async[F]) = ???
後でAsync[F].async {}
最初のケースとF.async {}
2番目のケースで使用できますが、違いがわかりません。どうも。