scala - 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' 之间有什么区别
解决方案
- nextOption 定义的正确部分是否被视为函数文字?
不,那只是方法体。函数文字类似于
:(i: Int) => i + 1
- 如果使用 'val' 关键字而不是 'def' 定义它会改变吗?
如果您只是def
用 a更改val
代码,则只会执行一次,您将获得一个值,而不是方法或函数。
- 为什么 nextOption 类型是 Option[Int] 而不是函数?( ()=>Option[Int] )
那不是 的类型,而是方法nextOption
执行后返回值的类型。
- 向此代码添加括号或方括号会更改其类型/值吗?
不知道你对这个到底是什么意思,请编辑问题,我会编辑答案。
- nextOption 和类似 '() => if (......) some(1) Else None' 之间有什么区别
如果你这样做:
val foo = () => if (util.Random.nextInt > 0) Some(1) else None
然后你有效地创建了一个函数,你可以像这样使用它:
foo()
// res: Option[Int] = None
推荐阅读
- laravel - SQLSTATE [42S02]:未找到基表或视图:1146 表 'blog.roles' 不存在
- php - 如果单个帖子的类别名称包含特定单词,则在 Wordpress 帖子中输出特定链接
- javascript - console.log 不在分配给带有“onclick”的按钮的函数中运行
- shell - 在文件中搜索单词然后替换其他文件中的文本
- ios - SwiftUI CoreData 布尔值
- android - java.lang.NoSuchMethodError: 没有静态方法 get(Ljava/lang/String;)Lokhttp3/HttpUrl; 在 Lokhttp3/HttpUrl 类中;或其超类
- javascript - 在请求完成之前加载圈会消失
- javascript - 如何在javascript的if语句中停止重复执行alert()?
- javascript - 如何在不向下推页面其余部分的情况下显示模式?
- sql - 在 mockaroo 中创建一个自定义列表作为主键,但不能将其设置为另一个数据集的外部列表