在Scala中可以有多个selftype吗?
我可以有一个在Scala中有两种不同自我类型的类吗?或者以某种方式模仿它在Scala中可以有多个selftype吗?,scala,self-type,Scala,Self Type,我可以有一个在Scala中有两种不同自我类型的类吗?或者以某种方式模仿它 object Hi { trait One { val num = 1 } trait Two { val num = 2 } class Test { this: One => { println(num) } this: Two => { p
object Hi {
trait One {
val num = 1
}
trait Two {
val num = 2
}
class Test {
this: One => {
println(num)
}
this: Two => {
println(num)
}
}
}
import Hi._
new Test with One
new Test with Two
子类型:
scala> trait Num { def num: Int }
defined trait Num
scala> trait One extends Num { val num = 1 }
defined trait One
scala> trait Two extends Num { val num = 2 }
defined trait Two
scala> class Test { _: Num => def f() = println(num) }
defined class Test
scala> new Test with One
res0: Test with One = $anon$1@389adf1d
scala> .f()
1
编辑:也许这是下意识的反应,我应该说是类型类。子类型:
scala> trait Num { def num: Int }
defined trait Num
scala> trait One extends Num { val num = 1 }
defined trait One
scala> trait Two extends Num { val num = 2 }
defined trait Two
scala> class Test { _: Num => def f() = println(num) }
defined class Test
scala> new Test with One
res0: Test with One = $anon$1@389adf1d
scala> .f()
1
编辑:也许这是下意识的反应,我应该说是类型类。如果你想同时拥有多个自我类型,你可以写
这个:一个有两个=>…
。在你的例子中,拥有两个独立的自我类型对我来说没有多大意义:如果你有两个不同的主体(具有不同的方法实现、不同的成员等),为什么不将它们分成两个独立的类/特征?如果你想同时拥有多个自我类型,您可以编写这个:一对二=>…
。在你的例子中,有两个独立的自我类型对我来说没有多大意义:如果你有两个不同的主体(具有不同的方法实现、不同的成员等),为什么不将它们分成两个独立的类/特征?很好!非常感谢。真不敢相信我没想到。有不同性格的人呢?我想我可以定义一个任意的catch-all方法…“使用任意不同的特性如何?”您可以使用结构类型作为自类型:类测试{this:{def-num:Int}=>…}
。我还没有详细测试过,但它至少可以编译。很好!非常感谢。真不敢相信我没想到。有不同性格的人呢?我想我可以定义一个任意的catch-all方法…“使用任意不同的特性如何?”您可以使用结构类型作为自类型:类测试{this:{def-num:Int}=>…}
。我还没有详细测试,但至少它是编译的。这对我来说有点意义:我可以和a或B混合在一起,如果我是a,就这样做,等等。它将差异行为本地化。不是说这是可取的。也许语法应该是case this:One=>
。我有一个用例,其中多个self类型都是完美的,并且从任何备选方案中都能发挥最大的作用,但我现在记不起来了。这对我来说是一种意义:我可以与a或B混合,如果我是a,就这样做,等等。它将差异行为本地化。不是说这是可取的。也许语法应该是case this:One=>
。我有一个用例,其中多个self类型都是完美的,并且从任何备选方案中都能发挥最大的作用,但我现在记不起来了。甚至连一个副本都记不起来了。该问题同时要求多个self类型,以便跟踪单个执行块。我要求根据不同的自我类型进行分支;i、 例如,根据我的自我类型有条件地做事。甚至不接近于重复。该问题同时要求多个self类型,以便跟踪单个执行块。我要求根据不同的自我类型进行分支;i、 例如,根据我的自我类型有条件地做事。