我有一个复杂的返回类型的方法,我想有一个函数,它将此方法的结果作为参数。是否可以为方法的返回类型创建别名?像C ++中的typeof
e.g。
object Obj {
def method(x:Int) = 1 to x
type ReturnType = ???
//possible solution if i know a parameter for which the method won't fail
val x = method(1)
type ReturnType = x.type
//another possible solution, I don't need a parameter that won't fail
//the method but i still think there is a better way
lazy val x = method(1)
type ReturnType = x.type
//I would then like to have a function which takes ReturnType as a parameter
def doit(t:ReturnType) = Unit
}
问题是编译器知道类型,但我不知道如何从他那里得到它。
答案 0 :(得分:2)
我能想到的唯一方法是:
class Return[T](f:() => T) {
type Type = T
}
def getDifficultReturnType() = 1 to 10
val Return = new Return(getDifficultReturnType)
def doIt(t:Return.Type) = {
}
我不确定这是否是你要找的。 p>
答案 1 :(得分:0)
据我所知,这是不可能的。也许在未来的Scala版本type macros。
在任何情况下,如果这种类型不重要,那么将其留下来并不是一个好的设计。我知道你不想输入80个字符,但是如果它保留那种类型(听起来很重要),那么它应该在某些点处进行说明。
您可以使用类型别名:
object Obj {
type ReturnType = My with Very[LongAndComplicated] with Name
// explicit type ensures you really get what you want:
def method(x: Int): ReturnType = 1 to x
def doit(t: ReturnType) {}
}