声明其类型是函数返回类型的变量

时间:2014-10-03 01:10:05

标签: scala dependent-type

我目前正在使用类型别名:

type FooType = Int
val foo = (_: Int) * 2

def takeFooRet(x: FooType) = ...

然而,我想做的事情如下:

val foo = (_: Int) * 2

def takeFooRate(x: foo.RetType) = ...

我在Function1中没有看到任何内容。这不可能吗?

2 个答案:

答案 0 :(得分:3)

这并非不可能,但您需要Function1将其返回类型公开为类型成员。不幸的是,情况并非如此,但您可以将Function1包装成能够为您提供所需信息的内容。这是一个微不足道的例子

class Function1Aux[T1, R](f: Function1[T1, R]) {
  type Out = R
}

val foo = new Function1Aux((_: Int) * 2)

def takeFooRate(x: foo.Out) = x

我意识到它并不漂亮,但它表明它在技术上是可行的。

答案 1 :(得分:1)

你需要知道输入类型或参数化你的'takeFooRate'某种类型

def takeFooRate[+Out](x: Int => Out) = ...

def takeFooRate[-In,+Out](x: In => Out) = ...