Scala 集合从何而来;val Singleton4:Set=Set=>;set==4";?
val Singleton4:Set=Set=>Set==4的详细方式是什么?我无法理解Scala 集合从何而来;val Singleton4:Set=Set=>;set==4";?,scala,Scala,val Singleton4:Set=Set=>Set==4的详细方式是什么?我无法理解set参数从何而来。它不是从任何地方“来的,set被定义为从整数到布尔值的函数,Singleton4的类型正是这样,它接受一个整数并返回一个需要另一个整数并返回布尔值的函数: scala> type Set = Int => Boolean defined type alias Set scala> def singletonSet(elem: Int): Set = set =&
set
参数从何而来。它不是从任何地方“来的,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>
另一种写作方式是:
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)
通过对函数进行curry运算并仅应用一个参数,您将返回一个仍然需要另一个整数才能完全计算的函数。它不是从任何地方“来”的,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>
另一种写作方式是:
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)
通过对函数进行curry运算并仅应用一个参数,您将返回一个仍然需要另一个整数才能完全计算的函数。可能会让您感到困惑的是,
Set
并不是人们期望从Scala库中得到的。你应该把这一行读为:
val Singleton4: Int => Boolean = someArbitraryName => someArbitraryName == 4
// <identifier> <type> = <argument> => <returnValue>
val Singleton4:Int=>Boolean=someArricryName=>someArricryName==4
// = =>
让您困惑的是,Set
并不是人们期望从Scala库中得到的。你应该把这一行读为:
val Singleton4: Int => Boolean = someArbitraryName => someArbitraryName == 4
// <identifier> <type> = <argument> => <returnValue>
val Singleton4:Int=>Boolean=someArricryName=>someArricryName==4
// = =>
其他答案都很好,但我想我应该提供一些额外的细节,以帮助Scala的新手更好地理解该符号(因为符号中有一些隐藏的宝石没有被发现/描述)
让我们玩Scala编译器游戏吧
下面的val
说明了类型所代表的内容
val Singleton4: Set = set => set == 4
明确给出了val
的类型-它是Set
。然而,我们对它知之甚少……还没有。但是,在使用它之前,必须将它交给编译器,并且在左边,它是一个函数(请注意,=>
两个字母的字符串),从类型(稍后我们将讨论它)到布尔值,因为set==4
将不可避免地以布尔值结束
从set==4
中,我们可以推断set
只能是Int
(因此您可以将苹果与苹果进行比较),因此我们得到了set
的类型为Int
val
的=
右侧也可以写成:
val Singleton4: Set = (set: Int) => set == 4
因此,Singleton4
val是一个名为Set
的函数Int=>Boolean
的实例<代码>集合
在上面的某个地方声明为(词典):
您可以将Set
替换为类型别名,最后得到:
val Singleton4: Int => Boolean = (set: Int) => set == 4
其他答案都很好,但我想我应该提供一些额外的细节,以帮助Scala的新手更好地理解该符号(因为符号中有一些隐藏的宝石没有被发现/描述)
让我们玩Scala编译器游戏吧
下面的val
说明了类型所代表的内容
val Singleton4: Set = set => set == 4
明确给出了val
的类型-它是Set
。然而,我们对它知之甚少……还没有。但是,在使用它之前,必须将它交给编译器,并且在左边,它是一个函数(请注意,=>
两个字母的字符串),从类型(稍后我们将讨论它)到布尔值,因为set==4
将不可避免地以布尔值结束
从set==4
中,我们可以推断set
只能是Int
(因此您可以将苹果与苹果进行比较),因此我们得到了set
的类型为Int
val
的=
右侧也可以写成:
val Singleton4: Set = (set: Int) => set == 4
因此,Singleton4
val是一个名为Set
的函数Int=>Boolean
的实例<代码>集合
在上面的某个地方声明为(词典):
您可以将Set
替换为类型别名,最后得到:
val Singleton4: Int => Boolean = (set: Int) => set == 4
赋值的左手在“val p:(Int)=>Boolean=singletonSet2(3)”中是什么意思?我从未见过像val p这样的语法:…val p:(Int)=>Booleanmeansp
是一个接受整数并返回布尔值的函数,如果您使用过集合并使用过fold、map、reduce等,请检查它们的签名,它们都从泛型类型a
中获取一些函数,并返回一个泛型类型B
,该泛型类型用scala语法编写f:a=>B
,这是map
的定义,没有一些杂音:defmap[B,即](f:a=>B)
赋值的左手在“val p:(Int)中是什么意思=>Boolean=singletonSet2(3)“我从来没有见过像val p:…val p:(Int)=>Booleanmeansp
是一个接受整数并返回布尔值的函数,如果您使用过集合并使用过fold、map、reduce等,请检查它们的签名,它们都从泛型类型a
中获取一些函数,并返回一个泛型类型B
,它是用scala语法编写的f:a=>B
,这是map
的定义,没有一些杂音:defmap[B,即](f:a=>B)