3 回答

TA貢獻1776條經驗 獲得超12個贊
B extends A
B
是A
B
要求A
如果 B
是擴展的,那么你. 所需
混入 A
.當一個具體的類最終擴展/混合-在這些特征中,一些類/特征必須實現 A
.
scala> trait User { def name: String }defined trait Userscala> trait Tweeter { | user: User => | def tweet(msg: String) = println(s"$name: $msg") | }defined trait Tweeterscala> trait Wrong extends Tweeter { | def noCanDo = name | }<console>:9: error: illegal inheritance; self-type Wrong does not conform to Tweeter's selftype Tweeter with User trait Wrong extends Tweeter { ^<console>:10: error: not found: value name def noCanDo = name ^
Tweeter
User
User
Tweeter
User
Wrong
scala> trait DummyUser extends User { | override def name: String = "foo" | }defined trait DummyUserscala> trait Right extends Tweeter with User { | val canDo = name | }defined trait Right scala> trait RightAgain extends Tweeter with DummyUser { | val canDo = name | }defined trait RightAgain
Right
User
User
Right
.
RightAgain
User
User

TA貢獻1831條經驗 獲得超4個贊
trait A { self: B => }trait B { self: A => }
extends
trait A extends Btrait B extends A error: illegal cyclic reference involving trait A
在電子表格示例中,類模型繼承了計算器,從而獲得了對其計算方法的訪問權。另一方面,類評估器將其Self類型定義為模型,如下所示:
package org.stairwaybook.scellstrait Evaluator { this: Model => ...

TA貢獻1898條經驗 獲得超8個贊
trait Foo{ this: { def close:Unit} => ...}
添加回答
舉報