首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >set在"val Singleton4 : Set = set => set == 4“中来自何处?

set在"val Singleton4 : Set = set => set == 4“中来自何处?
EN

Stack Overflow用户
提问于 2014-10-04 12:09:27
回答 3查看 96关注 0票数 0

val Singleton4 : Set = set => set == 4的详细方式是什么?我无法理解set参数来自何处。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-04 12:57:00

它不是来自任何地方,Set被定义为一个从整数到布尔的函数,而Singleton4的类型恰好是,它接受一个整数并返回一个需要另一个整数并返回一个布尔值的函数:

代码语言:javascript
复制
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是一个接受整数的函数:

代码语言:javascript
复制
scala>   p(3)
res0: Boolean = true

scala>   p(2)
res1: Boolean = false

另一种写作方式是:

代码语言:javascript
复制
def singletonSet(elem: Int) =  (i: Int) => i == elem
val p: (Int) => Boolean = singletonSet(3)

或者用一种不同的方式,但取得同样的结果:

代码语言:javascript
复制
def singletonSet(elem: Int)(i: Int): Boolean = i == elem
val p: (Int) => Boolean = singletonSet2(3)

通过运行该函数并仅应用一个参数,您将得到一个函数,该函数仍然需要另一个整数才能完全计算。

票数 2
EN

Stack Overflow用户

发布于 2014-10-04 14:35:15

可能让您感到困惑的是,Set并不像人们期望的那样来自Scala库。你应该把这一行读成:

代码语言:javascript
复制
val Singleton4:   Int => Boolean = someArbitraryName => someArbitraryName == 4
//  <identifier>  <type>         = <argument>        => <returnValue>
票数 3
EN

Stack Overflow用户

发布于 2014-10-06 08:15:34

其他的答案都很好,但我想我会抛出一些额外的细节来帮助Scala的新手更好地理解表示法(因为表示法中有一些隐藏的宝石没有被发现/描述)。

让我们玩Scala编译器游戏!

下面的val充分说明了类型所代表的Set

代码语言:javascript
复制
val Singleton4: Set = set => set == 4

val的类型是显式的-它是Set。然而,我们对it...yet知之甚少。然而,它必须先交给编译器,然后才能使用它,而在左边,它是一个函数(请记住,=>是两个字母的字符串),从一个类型(我们一会儿就会到达)到Boolean,因为set == 4不可避免地会以Boolean结尾。

通过set == 4,我们可以推断出set只能是Int (所以您可以将苹果和苹果进行比较),因此我们得到了set的类型,即Int

= of val的右边也可以写成:

代码语言:javascript
复制
val Singleton4: Set = (set: Int) => set == 4

因此,Singleton4 val是一个名为Set的函数Int => Boolean的实例。Set在上面(按字典顺序)被宣布为这样:

代码语言:javascript
复制
type Set = Int => Boolean

您可以将Set替换为类型别名,并以:

代码语言:javascript
复制
val Singleton4: Int => Boolean = (set: Int) => set == 4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26192672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档