新手scala混淆了识别类型签名,没什么(底部)

时间:2017-03-08 12:39:16

标签: scala

我最好被描述为C#/ F#+一些业余Haskell程序员。

我对Scala中的类型签名感到有点困惑。

例如

身份功能有类型

Nothing => Nothing

(根据我的intellij事件中的scala控制台)

但对我来说毫无意义。

身份的类型就像..

all x . x => x

.....

所以

identity 1
=> x ~ Int 
=> 1 : Int

Nothing => Nothing

对我来说毫无意义....我希望在将任何值传递给期望Nothing的函数时我输入异常!

显然我错过了一些东西。

2 个答案:

答案 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