Scala 当混合在一起时,将一个类转化为最后一个类的特征

Scala 当混合在一起时,将一个类转化为最后一个类的特征,scala,traits,Scala,Traits,在Scala中,是否可能有一个特性使它在final中混合到的类 如果某个类混合了某个特性,我需要防止从该类继承,但我不确定这是否可行。也许我需要一个宏 或者是一个技巧,比如在trait中定义一个final成员以避免两次混合该trait,但这不是我需要实现的 例如: trait MyTrait class A extends MyTrait class B extends A def myFun[T <: MyTrait](t: T) trait-MyTrait A类扩展了MyTrait

在Scala中,是否可能有一个特性使它在
final
中混合到的类

如果某个类混合了某个特性,我需要防止从该类继承,但我不确定这是否可行。也许我需要一个宏

或者是一个技巧,比如在trait中定义一个
final
成员以避免两次混合该trait,但这不是我需要实现的

例如:

trait MyTrait
class A extends MyTrait
class B extends A
def myFun[T <: MyTrait](t: T)
trait-MyTrait
A类扩展了MyTrait
B类扩展了A类

def myFun[T不,它不是。宏也没有帮助:你不能通过扩展某个东西来触发宏,只能通过注释或调用方法(据我所知)。

不,它不是。宏也没有帮助:你不能通过扩展某个东西来触发宏,只能通过注释或调用方法(据我所知).

这种方法怎么样:

trait MyTrait
class A extends MyTrait
class B extends A

def myFun[T](t: T)(implicit ev: T =:= A) = ()
defined function myFun
@ myFun(new A)

@ myFun(new B)
Main.scala:61: Cannot prove that cmd2.B =:= cmd1.A.
myFun(new B)
     ^
Compilation Failed

它与您所要求的有点不同,因为它与特征无关。它只是强制您只能将类型
a
传递给该函数,而不能传递给其子函数。

这种方法如何:

trait MyTrait
class A extends MyTrait
class B extends A

def myFun[T](t: T)(implicit ev: T =:= A) = ()
defined function myFun
@ myFun(new A)

@ myFun(new B)
Main.scala:61: Cannot prove that cmd2.B =:= cmd1.A.
myFun(new B)
     ^
Compilation Failed

它与你所要求的有点不同,因为它与特质无关。它只是强制你只能将type
a
传递给该函数,而不能传递给它的子函数。

我认为这是不可能的。你能详细说明一下你想要实现什么吗?你可能会发现迈尔斯·萨宾的这一要点很有趣:我不认为它是p可能。你能更详细地阐述一下你想要达到的目标吗?你可能会发现迈尔斯·萨宾的这一要点很有趣:我可能会使用注释而不是特征来达到同样的目的。你可能需要对你想要成为最终的类进行注释,在这种情况下,只需当场将其变成最终版本就更容易了ay有另一个含义,除此之外,使类成为最终类。但我更喜欢实际代码,而不是玩宏。出于同样的目的,我可能会使用注释而不是特征。你需要对要使类成为最终类的类进行注释,在这种情况下,使其成为最终类更容易。不完全是这样,注释可能会我有另一个意思,除此之外,让课程成为最终课程。但是我更喜欢实际的代码而不是玩宏。但是
A
是一种特定类型,我需要它是通用的。我需要确保
t
正是
t
的一个实例,无论
t
,或者无论
t但是
A
是一种特定类型,我都需要t泛型。我需要确保
t
正是
t
的实例,无论
t
,还是
t的实例