2009-08-28 108 views
2

我想編寫一個類看起來像這樣:對象將字符串轉換成「A」

class Store[+A](dest: Symbol)(implicit c: String => A) extends Action(dest) { 
    override def update(options: HashMap[Symbol,Any], arg: String): Unit = { 
    options += ((dest -> c(arg))) 
    } 
} 

object Store { 
    def apply[A](dest: Symbol)(c: String=>A) = new Store[A](dest)(c) 
    def apply[A](dest: Symbol) = new Store[A](dest) 
} 

這樣做,我有幾個問題:

  1. 使用隱式處理字符串導致沒有結束的問題
  2. 無論如何,如果系統在我的模塊中沒有定義它們,那麼它們需要在創建類的模塊中定義
  3. 第二個apply遇到在Store對象的HOD只是不作爲編譯A將被刪除。因此,編譯器沒有辦法找到一個轉換,從StringA

的你會如何創建這樣的對象,一個字符串轉換爲其他類型?我不希望庫的用戶輸入類型rwice(即通過指定類型和轉換函數)。

+0

不是一個完整的答案,但如何增加另一個隱式參數來存儲A的**清單**?正如'class Store [+ A](dest:Symbol)中隱含的a:scala.reflect.Manifest [A])(隱式c:String => A)extends Action(dest)':參見http:// scala-blogs .ORG/2008/10 /艙單-物化-types.html – VonC 2009-08-28 11:45:20

回答

1

我不明白你在嘗試第二個apply。對我來說,它看起來像第一個apply應該有隱式關鍵字,你會完成它。您可以顯式傳遞參數,或者如果存在隱式,則將其忽略。此外,您不需要明確地通過c,因爲您已經將其隱含在第一個apply的範圍內。

我想冒險第二個apply不編譯,因爲在object Store範圍內沒有暗示的String => A