当前位置:  开发笔记 > 编程语言 > 正文

Scala匿名函数语法和返回类型

如何解决《Scala匿名函数语法和返回类型》经验,为你挑选了1个好方法。

我在scala中发现了几种匿名函数语法:

val m5_1 = { (n: Int) => n * 5 }

val m5_2 = (n: Int) => { n * 5 } : Int

val m5_3: Int => Int = n => { n * 5 }

是否存在所有类型或更多语法类型?

它们都相同吗?

哪一个更受/更不受欢迎?

如何指定返回类型m5_1



1> 0__..:

我会尝试添加到@pamu的答案:

哪一个更受/更不受欢迎?

我会说第二个变种有点不常见.当类型推断很容易被看到时,你可以去第一个,否则是明确的,因为在第三个案例中是好的.你不需要括号,所以更简单的变种是

val m5_3: Int => Int = n => n * 5

甚至

val m5_3: Int => Int = _ * 5

如何在m5_1中指定返回类型?

返回类型是Int => Int,因此与第三种情况中使用的类型注释相同:

val m5_1: Int => Int = { (n: Int) => n * 5 }

但当然,您可以让Scala在右侧使用类型推断:

val m5_1: Int => Int = n => n * 5

因此,这与您的第三种形式相同.

请注意,: Int第二种形式中没有定义的类型m5_2,是Int => Int和否Int.它只是告诉Scala,它的类型n * 5是什么意思Int.这可以帮助您阅读代码,但实际上并没有改变在这种情况下推断类型的方式.你可以想到你的第二种形式:

val m5_2 = (n: Int) => { 
  val res = n * 5: Int  // : Int redundant here because it is already inferred
  res
}

哪里val res = n * 5: Int有同样的效果val res: Int = n * 5

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有