Questions tagged «traits»

在计算机编程中,特征是方法的集合,用作“用于构造面向对象程序的简单概念模型”

11
自我类型和特征子类之间有什么区别?
特质的自我类型A: trait B trait A { this: B => } 他说:“ A不能混入既不扩展又不扩展的具体阶级B”。 另一方面,以下内容: trait B trait A extends B 表示“任何(具体的或抽象的)类混合A也将在B中混合”。 这两句话不是同一回事吗?自类型似乎仅用于创建简单的编译时错误。 我想念什么?
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 这段代码不起作用,而且我找不到像继承那样来调用trait函数的方法。我打过电话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 …
369 php  traits 

13
特性与接口
我最近一直在尝试研究PHP,但发现自己迷上了特质。我了解水平代码重用的概念,并且不想一定要从抽象类继承。我不明白的是:使用特征和接口之间的关键区别是什么? 我曾尝试搜索一篇不错的博客文章或文章,解释何时使用一种或另一种,但到目前为止,我发现的示例似乎是如此相似,以至于完全相同。
344 php  interface  traits 

5
什么是密封性状?
密封的类在“在Scala中编程”中进行了描述,但是密封的特征没有。在哪里可以找到有关密封性状的更多信息? 我想知道,密封特征是否与密封类相同?或者,如果没有,有什么区别?什么时候使用密封特性(什么时候不使用)是个好主意?
332 scala  sealed  traits 



5
PHP的特质–任何实际示例/最佳实践?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 特性已成为PHP 5.4的最大新增功能之一。我了解语法并了解特性背后的思想,例如将水平代码重用于日志,安全性,缓存等常见内容。 但是,我仍然不知道如何在项目中利用特质。 是否有任何已经使用了特征的开源项目?关于如何使用特征构造体系结构的任何好的文章/阅读材料?
148 php  traits 

4
是否可以找出lambda的参数类型和返回类型?
给定一个lambda,是否可以弄清楚它的参数类型和返回类型?如果是,怎么办? 基本上,我希望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在接受lambda作为参数的函数模板中使用,并且我需要知道函数内部的参数类型和返回类型: 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! //... } 就目前而言,我们可以假设lambda正好采用了一个参数。 …

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 vs Scala特性有关。这不是重点。我也不只是在征求意见。相反,我正在寻找一个权威的答案或至少是对领域的洞察力:如果您在公司项目中使用默认方法作为特质,那是否真是定时炸弹?

3
何时在Scala特性中使用val或def?
我浏览了有效的scala幻灯片,并在幻灯片10中提到了永远不要val在trait抽象成员中使用def而是使用它。幻灯片没有详细说明为什么val在a中使用abstracttrait是反模式。如果有人可以解释在特征方法中使用val vs def的最佳实践,我将不胜感激

4
为什么PHP Trait无法实现接口?
我想知道为什么PHP Trait(PHP 5.4)无法实现接口。 从user1460043的答案更新=> ...不能要求使用它来实现特定接口的类 我明白,这可能是显而易见的,因为人们可能会觉得,如果Class A是使用Trait T其正在实施的interface I,比Class A应执行interface Iundirectly(这是不正确的,因为Class A可以重命名特征的方法)。 就我而言,我的特质是从使用特质的类实现的接口调用方法。 特质实际上是接口某些方法的实现。因此,我想在代码中“设计”每个想要使用我的特征的类都必须实现接口。这将允许Trait使用接口定义的类方法,并确保它们存在于类中。
82 php  oop  interface  traits 


2
对结构特征的引用
我有个特质 Foo pub trait Foo { fn do_something(&self) -> f64; } 和引用该特征的结构 pub struct Bar { foo: Foo, } 尝试编译我得到 error: reference to trait `Foo` where a type is expected; try `Box<Foo>` or `&Foo` 将结构更改为 struct Bar { foo: &Foo, } 告诉我 error: missing lifetime specifier 将定义更改为 struct Bar { …
72 rust  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 | …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.