Scala:将返回类型转换为自定义特征
-
28-09-2019 - |
题
我已经写了一个扩展迭代器[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
}
}
我完成了。太短了。
其他提示
我认为如果没有玩具,这是不可能的。混合蛋白继承发生在编译时,当它可以在静态上进行类型检查,并且始终针对另一个类,性状等。在这里,您尝试在运行时在现有对象上处理一个特征。
有解决方法,例如隐式转换或代理。可能是“最清洁”的方法是使增量授权授予基础迭代器。根据您的用例,可能还有其他解决方案。
不隶属于 StackOverflow