Scala 当混合在一起时,将一个类转化为最后一个类的特征
在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
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
它与你所要求的有点不同,因为它与特质无关。它只是强制你只能将typea
传递给该函数,而不能传递给它的子函数。我认为这是不可能的。你能详细说明一下你想要实现什么吗?你可能会发现迈尔斯·萨宾的这一要点很有趣:我不认为它是p可能。你能更详细地阐述一下你想要达到的目标吗?你可能会发现迈尔斯·萨宾的这一要点很有趣:我可能会使用注释而不是特征来达到同样的目的。你可能需要对你想要成为最终的类进行注释,在这种情况下,只需当场将其变成最终版本就更容易了ay有另一个含义,除此之外,使类成为最终类。但我更喜欢实际代码,而不是玩宏。出于同样的目的,我可能会使用注释而不是特征。你需要对要使类成为最终类的类进行注释,在这种情况下,使其成为最终类更容易。不完全是这样,注释可能会我有另一个意思,除此之外,让课程成为最终课程。但是我更喜欢实际的代码而不是玩宏。但是A
是一种特定类型,我需要它是通用的。我需要确保t
正是t
的一个实例,无论t
,或者无论t但是A
是一种特定类型,我都需要t泛型。我需要确保t
正是t
的实例,无论t
,还是t的实例