首页 > 解决方案 > Scala - 函数定义和没有参数的函数文字之间的区别

问题描述

scala> def nextOption = if (util.Random.nextInt > 0) Some(1) else None
nextOption: Option[Int]

scala> nextOption
res1: Option[Int] = Some(1)

scala> nextOption
res3: Option[Int] = None

尝试学习scala,在上面执行的代码之后有几个问题:
1. nextOption 定义的右侧部分是否考虑了函数文字?
2. 如果使用 'val' 关键字而不是 'def' 来定义它会改变吗?
3. 为什么 nextOption 类型是 Option[Int] 而不是函数?( ()=>Option[Int] )
4. 在这段代码中添加括号或括号会改变它的类型/值吗?
5. nextOption 和类似 '() => if (......) some(1) Else None' 之间有什么区别

标签: scala

解决方案


  1. nextOption 定义的正确部分是否被视为函数文字?

不,那只是方法体。函数文字类似于
(i: Int) => i + 1

  1. 如果使用 'val' 关键字而不是 'def' 定义它会改变吗?

如果您只是def用 a更改val代码,则只会执行一次,您将获得一个,而不是方法函数

  1. 为什么 nextOption 类型是 Option[Int] 而不是函数?( ()=>Option[Int] )

那不是 的类型,而是方法nextOption执行后返回值的类型。

  1. 向此代码添加括号或方括号会更改其类型/值吗?

不知道你对这个到底是什么意思,请编辑问题,我会编辑答案。

  1. nextOption 和类似 '() => if (......) some(1) Else None' 之间有什么区别

如果你这样做:

val foo = () => if (util.Random.nextInt > 0) Some(1) else None

然后你有效地创建了一个函数,你可以像这样使用它:

foo()
// res: Option[Int] = None

这可能会有所帮助:Difference between method and function in Scala


推荐阅读