我已经写了一个扩展迭代器[a]的自定义特征,我希望能够使用我在迭代器[a]上写的方法,该方法从另一种方法返回。这可能吗?

trait Increment[+A] extends Iterator[A]{
    def foo() = "something"
}

class Bar( source:BufferedSource){
    //this ain't working
    def getContents():Increment[+A] = source getLines
}

我仍在努力使我的头脑围绕整个隐含的事情,而不是很喜欢在 Bar 对象定义。我将如何按照上面的方式包装这样的物品来工作?

有帮助吗?

解决方案

弄清楚了。我花了几次尝试理解:

object Increment{
    implicit def convert( input:Iterator[String] ) = new Increment{
        def next() = input next
        def hasNext() = input hasNext
    }
}

我完成了。太短了。

其他提示

我认为如果没有玩具,这是不可能的。混合蛋白继承发生在编译时,当它可以在静态上进行类型检查,并且始终针对另一个类,性状等。在这里,您尝试在运行时在现有对象上处理一个特征。

有解决方法,例如隐式转换或代理。可能是“最清洁”的方法是使增量授权授予基础迭代器。根据您的用例,可能还有其他解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top