首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Scala中,这些方法类型签名(i:T):T和T=>T之间有什么区别?

在Scala中,这些方法类型签名(i:T):T和T=>T之间有什么区别?
EN

Stack Overflow用户
提问于 2022-07-31 10:19:13
回答 1查看 71关注 0票数 0

在下面的示例中,为什么这些方法有不同的类型,它们的类型有何不同?

代码语言:javascript
复制
Int => Int //is a shortcut for 
Function1[Int, Int].

但是为什么一个方法有一个不同的类型,(i: Int): IntInt => Int有什么区别呢?函数是否具有类似于第一个示例中的类似类型?

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2022-07-31 16:18:29

简而言之,Int => Int只是Function1[Int, Int]的一个句法糖

方法具有不同的签名,因为Scala中的方法只是类中的方法,就像Java方法一样。这可以有一个像这样的签名:(i: Int): Int

另一方面,Int => Int被称为函数类型。主要的区别是函数类型是Function1[Int, Int]类型本身的对象。因为一个对象是一个值,函数也是一个值。

现在,val函数是通过Function22实现的Function0的具体实例,可以使用andThencomposetoString组合。但是,由于您像一个匿名函数一样创建它,所以编译器将其作为Function1特性的匿名实例来实现,并使用覆盖的toString方法。这就是为什么您在REPL中看到的不同之处。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73182425

复制
相关文章

相似问题

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