val Singleton4 : Set = set => set == 4的详细方式是什么?我无法理解set参数来自何处。
发布于 2014-10-04 12:57:00
它不是来自任何地方,Set被定义为一个从整数到布尔的函数,而Singleton4的类型恰好是,它接受一个整数并返回一个需要另一个整数并返回一个布尔值的函数:
scala> type Set = Int => Boolean
defined type alias Set
scala> def singletonSet(elem: Int): Set = set => set == elem
singletonSet: (elem: Int)Int => Boolean
scala> val p: Set = singletonSet(3)
p: Int => Boolean = <function1>因此,现在p是一个接受整数的函数:
scala> p(3)
res0: Boolean = true
scala> p(2)
res1: Boolean = false另一种写作方式是:
def singletonSet(elem: Int) = (i: Int) => i == elem
val p: (Int) => Boolean = singletonSet(3)或者用一种不同的方式,但取得同样的结果:
def singletonSet(elem: Int)(i: Int): Boolean = i == elem
val p: (Int) => Boolean = singletonSet2(3)通过运行该函数并仅应用一个参数,您将得到一个函数,该函数仍然需要另一个整数才能完全计算。
发布于 2014-10-04 14:35:15
可能让您感到困惑的是,Set并不像人们期望的那样来自Scala库。你应该把这一行读成:
val Singleton4: Int => Boolean = someArbitraryName => someArbitraryName == 4
// <identifier> <type> = <argument> => <returnValue>发布于 2014-10-06 08:15:34
其他的答案都很好,但我想我会抛出一些额外的细节来帮助Scala的新手更好地理解表示法(因为表示法中有一些隐藏的宝石没有被发现/描述)。
让我们玩Scala编译器游戏!
下面的val充分说明了类型所代表的Set。
val Singleton4: Set = set => set == 4val的类型是显式的-它是Set。然而,我们对it...yet知之甚少。然而,它必须先交给编译器,然后才能使用它,而在左边,它是一个函数(请记住,=>是两个字母的字符串),从一个类型(我们一会儿就会到达)到Boolean,因为set == 4不可避免地会以Boolean结尾。
通过set == 4,我们可以推断出set只能是Int (所以您可以将苹果和苹果进行比较),因此我们得到了set的类型,即Int。
= of val的右边也可以写成:
val Singleton4: Set = (set: Int) => set == 4因此,Singleton4 val是一个名为Set的函数Int => Boolean的实例。Set在上面(按字典顺序)被宣布为这样:
type Set = Int => Boolean您可以将Set替换为类型别名,并以:
val Singleton4: Int => Boolean = (set: Int) => set == 4https://stackoverflow.com/questions/26192672
复制相似问题