的隱含VAL當我寫在斯卡拉與case類節目中,我遇到了一個循環模式,我希望把一個案例類的創建者作爲參數,以供日後參考。我明白了,我們可以通過把隱性價值的情況下,類抽象案例類
abstract class MessageCreator
case class SomeMessage(s:String)(implicit val creator:MessageCreator)
class MyCreator extends MessageCreator { implicit val creator = this}
class ACreator extends MyCreator { def newMessage = SomeMessage("hello") }
然後捕獲這種模式,NewMessage作爲這裏將有指ACreator自身的實例成員creator
。
現在,我有一堆case類,會做同樣的事情。我的問題是,如果每次我想定義這樣的案例類時,如何複製並粘貼(implicit val creator:MessageCreator)
,您將如何重複此模式?
我試圖定義與隱VAL一個抽象類,然後從案例類繼承他們,但Scala的抱怨,從抽象類的隱性VAL的情況下類沒有定義。顯然,case類不能被繼承。
如果不能以編程方式做,我可能會開始尋找到寫一個宏(這將是一個精解)。我想確保我不會在這裏丟失任何東西。
恕我直言,這樣的參數應該明確,只有明確通過。如果你真的需要這個,你可以使用伴侶對象作爲工廠來傳遞創建者參數。 – vitalii
感謝您的評論。如果我有一個伴隨對象,比如說'def apply(隱式val創建者:MessageCreator){...}',那麼如何讓case類繼承這樣的伴隨對象類呢? –