我想写一个函数,返回一个部分应用的函数,它返回一个特定的抽象类的子类型。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