我目前正在使用类型别名:
type FooType = Int
val foo = (_: Int) * 2
def takeFooRet(x: FooType) = ...
然而,我想做的事情如下:
val foo = (_: Int) * 2
def takeFooRate(x: foo.RetType) = ...
我在Function1中没有看到任何内容。这不可能吗?
答案 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) = ...