問題タブ [default-implementation]

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.

0 投票する
1 に答える
269 参照

swift - 実装されたプロトコルの静的メソッドをどのように区別しますか?

インスタンス関数の場合、キャストは問題なく機能します。

0 投票する
2 に答える
885 参照

swift - プロトコルに型が関連付けられている場合に、通常のメソッドからプロトコルのデフォルト実装を呼び出す

デフォルトのパラメーターを持つ静的メソッドを持つプロトコルがあります。プロトコルを実装するクラスのデフォルト値を変更したい。クラスやスーパーで簡単にできることを本質的にやっています。
プロトコルに関連付けられたタイプがない場合にのみ解決策があります。

次のコードは機能しますが、関連する型宣言のコメントを外すとすぐにコンパイルされません。

コンパイルされない理由は理解できます:Protocolの具体的な型がありませんAssociatedType
したがって、質問は「プロトコルを明示的に特化できますか?」と読むべきかもしれませんが、それに対する答えはノーだと思います。

部分的な回避策があります。しかし、それが機能するときでさえ、それはひどいです。
特に、公開されているライブラリを作成していると考えるとsayHello、次の回避策により、公開する必要があるが役に立たない2番目のプロトコルを作成する必要があります。
回避策は次のとおりです。

しかし、私sayHelloは関連付けられた型を使用しているため、これはうまくいきません。したがって、別のプロトコルに抽出することはできません。

私が明確であることを確認するために、ここに私が望むものがあります。プロトコルのクラスを置き換えるだけです:

0 投票する
1 に答える
847 参照

types - すべての特性オブジェクトのデフォルトの特性メソッドの実装

私は trait を持っていて、すべての trait オブジェクトを互いに比較できるようにしMyTraitたいのです。私は今、特性オブジェクト間の同等性をテストする方法に&MyTrait基づいていますか? .

問題はMyTraitComparable、代わりにどこでも使用する必要があることですMyTrait。これを回避する方法はありますか?

デフォルトの実装に移動as_anyequalsて提供しようとしましたが、MyTrait

  • selfその場合は使えないと思うのでダメです。
  • 使用するtrait MyTrait: PartialEqと、特性オブジェクトを作成できなくなります。