我试图隐含参数与case类结合起来,但我被困。案例类和隐参数和模式匹配
case class C(i: Int)(implicit b: Boolean)
val c1 = C(1)(true)
implicit val b = true
val c2 = C(2)
c1 match {
case C(i)(b) => // doesn´t work
case C(i,b) => // doesn´t work
case C(i) => // works, but wanted: if (b) i else 0
}
根据Scala的语言规范的编译器生成的提取对象it's到期的情况下的类:我的隐式Boolean
不是所得情况下类的成员,所以它必须是在第二个(隐的)参数列表(即我不能在同伴找到object's应用方法,不幸的是):
的
c[tps](ps1). . .(psn)
与类型参数tps
和值 参数的情况类定义ps
隐含地产生的提取物(§ 8.1.8),其定义为 如下:
object c {
def apply[tps](ps1). . .(psn): c[tps] = new c[Ts](xs1). . .(xsn)
def unapply[tps](x: c[tps]) =
if (x eq null) scala.None
else scala.Some(x.xs11, . . . , x.xs1k)
}
我如何定义与在创建时隐式地提供会员的情况下,类?
其实我觉得你可以* *定义'对象C'覆盖供应'unapply'的情况下级。另外'隐式b'不会自动变成'val b',所以还有一些工作要做。 – 2011-03-15 17:52:50
“无法解决超载不应用” :)至于瓦尔,是的,我是中间的编辑。 :) – 2011-03-15 17:53:55
我想的话,你同样可以写:'C1匹配{情况下,x @ C(I)=>如果(x.b)我还有0}' – Mahdi 2015-12-11 10:22:22