scala引用参数的值

时间:2014-03-05 02:12:25

标签: function scala types

如果我有以下类型和功能:

object M {
    type X[Boolean] = Int => Boolean

    def retrieveVal(x: X[Boolean]) : Boolean = //retrieve the Boolean value of x
}

我如何检索并返回布尔值?

1 个答案:

答案 0 :(得分:4)

这是一种特殊类型的别名。它有一个正式的类型参数(其名称无关,因此选择Boolean具有误导性),它定义了从Int到该任意类型的函数。然后,您定义一个方法retrieveVal,该方法采用恰好X的特定X[Boolean](此处Boolean实际类型参数因此 我们熟悉的Boolean并返回一些Boolean。但是,作为参数传递的函数x需要Int参数,并且没有证据。

所以,如果你的retrieveVal被定义为这样:

def retrieveVal(i: Int, x: X[Boolean]): Boolean = ...
你可以这样定义:

def retrieveVal(i: Int, x: X[Boolean]): Boolean = x(i)

即便:

scala> type X[Boolean] = Int => Boolean
defined type alias X

scala> def retrieveVal(i: Int, x: X[Boolean]): Boolean = x(i)
retrieveVal: (i: Int, x: Int => Boolean)Boolean

scala> retrieveVal(23, i => i % 2 == 0)
res0: Boolean = false