2

我有一个返回类型复杂的方法,我想要一个函数,该函数将这个方法的结果作为参数。是否可以为方法的返回类型创建别名?类似于 C++ 中的 typeof

例如

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
}

问题是编译器知道类型,但我不知道如何从他那里得到它。

4

2 回答 2

2

我能想到的唯一方法是:

class Return[T](f:() => T) {
  type Type = T
}

def getDifficultReturnType() = 1 to 10

val Return = new Return(getDifficultReturnType)

def doIt(t:Return.Type) = {

}

我不确定这是否是您正在寻找的。

于 2013-04-03T22:15:19.303 回答
0

据我所知,这是不可能的。也许在未来的带有类型宏的 Scala 版本中。

无论如何,在我看来,如果类型不重要,则将其丢弃不是一个好的设计。我知道您不想输入 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) {}
}
于 2013-04-03T21:08:03.657 回答