有沒有辦法避免這樣的代碼?隱含在內部的case類顯式參數
case class Foo(bar: Int, baz: String, ec: ExecutionContext) {
implicit val implicitEc = ec
....
}
在參數列表的前面添加隱含的效果與期望值不同。我希望executionContext是構造函數的一個顯式參數,但在類體內被視爲一個隱式變量。
有沒有辦法避免這樣的代碼?隱含在內部的case類顯式參數
case class Foo(bar: Int, baz: String, ec: ExecutionContext) {
implicit val implicitEc = ec
....
}
在參數列表的前面添加隱含的效果與期望值不同。我希望executionContext是構造函數的一個顯式參數,但在類體內被視爲一個隱式變量。
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)
如果它是唯一的參數呢? –
看到編輯... –
謝謝。這是一個不幸的是,人們必須屈服於這樣的技巧。斯卡拉真的很擅長去除樣板和冗餘,但它是不完美的。 –
簡化版,的情況下,類Foo(巴:詮釋,巴茲:字符串,隱EC:執行上下文)的作品? – andrefsp
根據阿列克謝羅曼諾夫它,但是,我需要它的第一個(也是唯一的)參數... –