2015-11-06 21 views
1

有沒有辦法避免這樣的代碼?隱含在內部的case類顯式參數

case class Foo(bar: Int, baz: String, ec: ExecutionContext) { 
    implicit val implicitEc = ec 

    .... 
} 

在參數列表的前面添加隱含的效果與期望值不同。我希望executionContext是構造函數的一個顯式參數,但在類體內被視爲一個隱式變量。

+0

簡化版,的情況下,類Foo(巴:詮釋,巴茲:字符串,隱EC:執行上下文)的作品? – andrefsp

+0

根據阿列克謝羅曼諾夫它,但是,我需要它的第一個(也是唯一的)參數... –

回答

3
case class Foo(bar: Int, baz: String, implicit val ec: ExecutionContext) 

工程。請注意,它不能應用於第一個參數。在這種情況下,我會使用您的原始代碼(除了使用implicit private def而不是implicit val,所以您不會創建額外的字段並且不會污染API)。如果你有這樣的多個類,這個解決方案應該工作(調整名稱適量):

abstract class MakeTheParameterImplicit[A](implicit protected val dontOverrideInChildren: A) 

case class Foo(ec: ExecutionContext) extends MakeTheParameterImplicit[ExecutionContext]()(ec) 
+0

如果它是唯一的參數呢? –

+0

看到編輯... –

+0

謝謝。這是一個不幸的是,人們必須屈服於這樣的技巧。斯卡拉真的很擅長去除樣板和冗餘,但它是不完美的。 –