我想寫一個函數,返回一個部分應用的函數,它返回一個特定的抽象類的子類型。Scala:類型方法,返回一個子類型
我有一個抽象類
abstract class IsoBoxReader
我有一個派生類
class FileTypeBoxReader(val box, val isoReader) extends IsoBoxReader
我想要做這樣的事情,我不知道,如果它的可能:
def recognize[ T <: IsoBoxReader ](box): (IsoReader) => T =
{
box.boxType match {
case "ftyp" => (isoReader: IsoReader) => new FileTypeBoxReader(box, isoReader)
case _ => // return some other box type
}
}
基於一條信息的上述方法返回一個部分應用的函數,它可以在一個la在剩餘的必要論證可用的地方。
你們中的一些人可能已經猜到我試圖根據ISO規範解析ISO文件。我這樣做基本上是爲了體驗,它看起來像一個有趣的面向對象和功能設計問題。
要創建一個特定的盒式閱讀器,我需要一個基本框,它是標題信息和基本上做特定文件閱讀的閱讀器對象。我想寫一個函數給定一個盒子(盒子類型),我得到一個部分應用的函數,返回一個子類型的IsoBoxReader。通過這種方式,調用者可以使用其IsoReader版本(文件讀取,有狀態對象)創建實際實例。編譯器抱怨模式匹配,特別是調用類型不匹配。
它說發現FileTypeBoxReader但預計牛逼
然而,根據Type參數,因爲它是一個子類IsoBoxReader的不FileTypeBoxReader有效的返回值?
「boxType」在哪裏定義?它的定義是什麼?請至少創建自包含的代碼片段。 – 2013-02-20 07:13:26
boxType是一個字符串...它只是一個選擇器... – 2013-02-20 07:32:48