我試圖隱含參數與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