我试图定义一个方法 - 它接受一个A
,它必须是2个特征的一个子类型。通用方法实现两个特征
scala> trait Foo
defined trait Foo
scala> trait Bar
defined trait Bar
scala> def f[A <: Foo, Bar](x: A) = x
f: [A <: Foo, Bar](x: A)A
scala> case class Bip extends Foo with Bar
scala> val bip = Bip()
bip: Bip = Bip()
// looks good
scala> f(bip)
res0: Bip = Bip()
// only extends `Foo`
scala> case object Fip extends Foo
defined module Fip
// I expected a compile-time error
scala> f(Fip)
res1: Fip.type = Fip
我怎么能写正确f
,使得其只接受Foo
和Bar
实现者?
我只想澄清一点,'高清F [A <:美孚,酒吧] ...'并不意味着你认为它手段。它像“(A <:Foo),Bar”一样分组。换句话说,你正在创建另一个名为'Bar'的类型变量,它隐藏了特性'Bar'。 – ephemient 2015-02-10 22:03:51