我最好被描述为C#/ F#+一些业余Haskell程序员。
我对Scala中的类型签名感到有点困惑。
例如
身份功能有类型
Nothing => Nothing
(根据我的intellij事件中的scala控制台)
但对我来说毫无意义。
身份的类型就像..
all x . x => x
.....
所以
identity 1
=> x ~ Int
=> 1 : Int
Nothing => Nothing
对我来说毫无意义....我希望在将任何值传递给期望Nothing的函数时我输入异常!
显然我错过了一些东西。答案 0 :(得分:4)
在scala中,方法和函数值之间存在区别。方法可以参数化,而值(函数或其他)不能。
所以身份方法看起来像这样:
def identity[A](x: A): A = x
类型为[A](x: A)A
。但是如果你把它转换成这样的函数值:
val idFunction = identity _
值idFunction
的类型为Nothing => Nothing
。由于我没有向identity
提供类型参数,因此编译器推断出A = Nothing
。
你可以做的是:
val intIdentity = identity[Int] _
然后intIdentity
会有Int => Int
类型。
答案 1 :(得分:1)
hun_percent <-
hun %>%
group_by(Score) %>%
summarise_each(funs(n=n()))
函数在identity
中定义,并具有以下类型签名:
scala.PreDef
它需要一个类型参数def identity[A](x: A): A
,类型为A
的值,并返回它作为输入的内容。
请在此处查看scala.PreDef的文档:scala.Predef