在下面的示例中,为什么这些方法有不同的类型,它们的类型有何不同?
Int => Int //is a shortcut for
Function1[Int, Int].但是为什么一个方法有一个不同的类型,(i: Int): Int和Int => Int有什么区别呢?函数是否具有类似于第一个示例中的类似类型?
scala> :t def double(i: Int): Int = i * 2
(i: Int): Int
scala> :t def double: Int => Int = i => i * 2
Int => Int
scala> val double2 : Int => Int = i => i * 2
val double2: Int => Int = $Lambda$1197/0x00000008010c8400@54398386
scala> :t double2
Int => Int发布于 2022-07-31 16:18:29
简而言之,Int => Int只是Function1[Int, Int]的一个句法糖。
方法具有不同的签名,因为Scala中的方法只是类中的方法,就像Java方法一样。这可以有一个像这样的签名:(i: Int): Int。
另一方面,Int => Int被称为函数类型。主要的区别是函数类型是Function1[Int, Int]类型本身的对象。因为一个对象是一个值,函数也是一个值。
现在,val函数是通过Function22实现的Function0的具体实例,可以使用andThen、compose和toString组合。但是,由于您像一个匿名函数一样创建它,所以编译器将其作为Function1特性的匿名实例来实现,并使用覆盖的toString方法。这就是为什么您在REPL中看到的不同之处。
https://stackoverflow.com/questions/73182425
复制相似问题