タグ付けされた質問 「traits」

コンピュータプログラミングでは、特性はメソッドのコレクションであり、「オブジェクト指向プログラムを構造化するための単純な概念モデル」として使用されます。

11
自己型と特性サブクラスの違いは何ですか?
特性の自己型A: trait B trait A { this: B => } 言う「Aも伸びていない具体的なクラスに混入することはできませんB」。 一方、次のとおりです。 trait B trait A extends B その言う「任意の(コンクリートや抽象)クラスがでミキシングAもBに混合されます」。 これらの2つのステートメントは同じことを意味しませんか?自己型は、単純なコンパイル時エラーの可能性を作成するためにのみ役立つようです。 何が欠けていますか?
387 scala  traits  self-type 


4
トレイト関数をオーバーライドして、オーバーライドされた関数から呼び出す方法は?
シナリオ: trait A { function calc($v) { return $v+1; } } class MyClass { use A; function calc($v) { $v++; return A::calc($v); } } print (new MyClass())->calc(2); // should print 4 このコードは機能せず、継承されたような特性関数を呼び出す方法が見つかりません。私は呼び出してみましたself::calc($v)、static::calc($v)、parent::calc($v)、A::calc($v)および以下: trait A { function calc($v) { return $v+1; } } class MyClass { use A { calc as …
370 php  traits 

13
特性とインターフェース
私は最近PHPについて勉強しようとしていますが、自分が特性に夢中になっていることに気づきました。水平方向のコードの再利用の概念を理解しており、必ずしも抽象クラスから継承したくない。私が理解していないのは、トレイトとインターフェイスの重要な違いは何ですか? どちらを使用するかを説明する適切なブログ投稿または記事を検索してみましたが、これまでに見つけた例は、まったく同じように非常に似ているようです。
344 php  interface  traits 

5
封印された特性とは何ですか?
封印されたクラスは「Scalaでのプログラミング」で説明されていますが、封印された特性は記述されていません。封印された特性に関する詳細情報はどこで入手できますか? 封印された特性が封印されたクラスと同じかどうか知りたいのですが?または、そうでない場合、違いは何ですか?いつ封印された特性を使用するのが良いのですか(そうでない場合)?
332 scala  sealed  traits 

3
Rustの特性とHaskellの型クラスの違いは何ですか?
Rustの特性は、少なくとも表面的にはHaskellのタイプクラスに似ているように見えますが、それらの間にはいくつかの違いがあると人々が書いているのを見てきました。私はこれらの違いが何であるかを正確に疑問に思っていました。
157 haskell  rust  traits 


5
PHPの特性–実際の例/ベストプラクティスはありますか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。私たちは回答が事実、参考文献、専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 トレイトは、PHP 5.4の最大の追加機能の1つです。私は構文を知っており、ロギング、セキュリティ、キャッシングなどの一般的なものに水平コードを再利用するなど、特性の背後にある考え方を理解しています。 しかし、私は自分のプロジェクトでどのように特性を利用するのかまだわかりません。 すでに特性を使用しているオープンソースプロジェクトはありますか?特性を使用してアーキテクチャを構築する方法についての良い記事/資料はありますか?
148 php  traits 

4
ラムダのパラメーターの型と戻り値の型を理解することは可能ですか?
ラムダを考えると、それがパラメーターの型と戻り値の型を理解することは可能ですか?はいの場合、どのように? 基本的に、私はlambda_traitsこれを以下の方法で使用できるようにしたい: auto lambda = [](int i) { return long(i*10); }; lambda_traits<decltype(lambda)>::param_type i; //i should be int lambda_traits<decltype(lambda)>::return_type l; //l should be long 背後にある動機は、lambda_traits引数としてラムダを受け入れる関数テンプレートで使用したいことであり、関数内のパラメーターの型と戻りの型を知る必要があります。 template<typename TLambda> void f(TLambda lambda) { typedef typename lambda_traits<TLambda>::param_type P; typedef typename lambda_traits<TLambda>::return_type R; std::function<R(P)> fun = lambda; //I want to do this! //... } とりあえず、ラムダは引数を1つだけ取ると想定できます。 …

1
特性としてのJava 8のデフォルトメソッド:安全?
デフォルトのメソッドを Java 8の貧困層の特性のトレイトとして使用することは安全な方法ですか? パンダをそれだけで使うと悲しいかもしれないと主張する人もいます。クールだからですが、それは私の意図ではありません。また、APIの進化と下位互換性をサポートするためにデフォルトのメソッドが導入されたこともよく思い出されますが、これは、それ自体を特性として使用することを間違ったり、歪ませたりするものではありません。 私が持っている以下の実用的なユースケースを念頭に置きました: public interface Loggable { default Logger logger() { return LoggerFactory.getLogger(this.getClass()); } } または、次のように定義しますPeriodTrait。 public interface PeriodeTrait { Date getStartDate(); Date getEndDate(); default isValid(Date atDate) { ... } } 確かに、コンポジションを使用することもできます(ヘルパークラスを使用することもできます)が、より冗長で雑然としており、ポリモーフィズムの恩恵を受けることができません。 では、デフォルトのメソッドを基本的な特性として使用しても問題ありませんか?それとも、予期しない副作用について心配する必要がありますか? SOに関するいくつかの質問は、JavaとScalaの特性に関連しています。それはここでのポイントではありません。私も単に意見を求めるのではありません。代わりに、私は信頼できる回答または少なくともフィールドインサイトを探しています。企業プロジェクトの特性としてデフォルトの方法を使用した場合、それは時限爆弾であることが判明しましたか?

3
Scalaトレイトでvalまたはdefを使用するのはいつですか?
私は効果的なスカラスライドを調べていましたが、スライド10には、抽象メンバーvalには絶対にtrait使用せdefず、代わりに使用するように記載されています。スライドではval、atraitでabstractを使用することがアンチパターンである理由については詳しく説明していません。誰かが抽象メソッドの特性でvalvsdefを使用することに関するベストプラクティスを説明できれば幸いです

4
PHPトレイトがインターフェースを実装できないのはなぜですか?
なぜPHPトレイト(PHP 5.4)がインターフェースを実装できないのか疑問に思います。 user1460043の回答からの更新=> ...特定のインターフェースを実装するためにそれを使用するクラスを要求することはできません を実装しているClass AaTrait Tを使用している場合、間接的に実装する必要があるinterface Iよりも、人々が考える可能性があるため、それは明らかである可能性があることを理解しています(これは、トレイトメソッドの名前を変更できるため真実ではありません)。Class Ainterface IClass A 私の場合、私の特性は、特性を使用するクラスが実装するインターフェースからメソッドを呼び出すことです。 特性は、実際にはインターフェースのいくつかのメソッドの実装です。だから、私は自分の特性を使用したいすべてのクラスがインターフェースを実装しなければならないコードで「設計」したいと思います。これにより、Traitはインターフェイスで定義されたクラスメソッドを使用し、それらがクラスに存在することを確認できます。
82 php  oop  interface  traits 


2
`std :: mem :: drop`が上位のトレイト境界のクロージャ| _ |()とまったく同じではないのはなぜですか?
の実装はstd::mem::drop次のように文書化されています。 pub fn drop<T>(_x: T) { } そのため、クロージャー|_| ()(通称、トイレクロージャー)dropは、双方向での1対1の交換の可能性があると予想します。ただし、以下のコードdropは、これが関数のパラメーターにバインドされたより高いランクの特性と互換性がないことを示していますが、トイレのクロージャーは互換性があります。 fn foo<F, T>(f: F, x: T) where for<'a> F: FnOnce(&'a T), { dbg!(f(&x)); } fn main() { foo(|_| (), "toilet closure"); // this compiles foo(drop, "drop"); // this does not! } コンパイラのエラーメッセージ: error[E0631]: type mismatch in function arguments --> src/main.rs:10:5 | …

4
ランク付けされたトレイトバインドされたトレイトから関連付けられたタイプを返すにはどうすればよいですか?
関連する型を逆シリアル化する機能を持つトレイトがあります。ただし、その関連付けられた型には、呼び出し元が決定する存続期間が必要なため、より高いランクの特性を使用する別の特性を持っているため、どの存続期間でも逆シリアル化できます。 この関連する型を返すクロージャーを使用する必要があります。 これを行うには、次のコードがあります。 #![allow(unreachable_code)] use std::marker::PhantomData; trait Endpoint: for<'a> EndpointBody<'a> {} trait EndpointBody<'a> { type Out: 'a; fn serialize(body: &Self::Out) -> Vec<u8>; fn deserialize(raw_body: &'a [u8]) -> Self::Out; } // ///////////////////////////////////////////////////////// /// Trait object compatible handler trait Handler { fn execute(&self, raw_body: &[u8]) -> Vec<u8>; } /// Wraps a function …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.