当前位置: 首页 > 知识库问答 >
问题:

Scala-函数定义和不带参数的函数文本之间的区别

单于阳
2023-03-14
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。向此代码添加parantess或括号会改变它的类型/值吗?
5。nextOption和'()=>if(.....)之类的东西有什么区别一些(1)其他没有

共有1个答案

司空胤
2023-03-14

我认为混乱源于REPL打印无参数方法的方法类型的方式。考虑一下如果我们添加空参数列表()会发生什么

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

请注意,现在方法类型是如何打印为()option[Int],而不是常见的()=>option[Int]。另外,如果REPL打印无参数方法的方法类型,就不会那么令人困惑了

=> Option[Int]

正如SLS中所描述的

scala> nextOption _
res12: () => Option[Int] = $$Lambda$1218/528012220@37e5111b
 类似资料:
  • 带参数的宏和函数很相似,但有本质上的区别:宏展开仅仅是字符串的替换,不会对表达式进行计算;宏在编译之前就被处理掉了,它没有机会参与编译,也不会占用内存。而函数是一段可以重复使用的代码,会被编译,会给它分配内存,每次调用函数,就是执行这块内存中的代码。 【示例①】用函数计算平方值。 运行结果: 1^2 = 1 2^2 = 4 3^2 = 9 4^2 = 16 5^2 = 25 【示例②】用宏计算平方

  • 将函数传递给另一个函数的Scala示例缺少传递的函数(时间段)接受参数(x)的情况。 我怎样才能使上述代码工作? 编辑:我在oncepersecond中添加了一个x,以明确目标是传递整数。

  • Scala 函数 一般情况下函数调用参数,就按照函数定义时的参数顺序一个个传递。但是我们也可以通过指定函数参数名,并且不需要按照顺序向函数传递参数,实例如下: object Test { def main(args: Array[String]) { printInt(b=5, a=7); } def printInt( a:Int, b:Int ) = {

  • 问题内容: 其实我不明白,无参数构造函数和默认构造函数有什么区别。 创建名为cFrame的Test对象时,这是否调用此类的默认构造函数? 问题答案: 该构造函数是一个无参数的构造函数,代表您的Java编译器插入; 它包含对(not )的调用,这是默认行为。如果实现任何构造函数,则不再收到默认的构造函数。 JLS-8.8.9。默认构造函数说(部分), 如果一个类不包含构造函数声明,则隐式声明一个没有

  • 本文向大家介绍SCALAR和COLUMN函数之间的区别,包括了SCALAR和COLUMN函数之间的区别的使用技巧和注意事项,需要的朋友参考一下 DB2 SCALAR函数采用单个列值并返回单个结果。COLUMN函数从DB2表的多行中获取列值,并返回单个结果。对于SCALAR函数,仅涉及一行。 SCALAR 函数 描述 LENGTH 给出列值的长度 REPLACE 用于用另一个字符串替换一个字符串 C

  • 本文向大家介绍虚函数与纯虚函数之间的区别,包括了虚函数与纯虚函数之间的区别的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将了解虚拟和纯虚拟功能之间的区别。 虚函数 它在类中有自己的定义。 基类可以覆盖虚拟函数。 它没有派生类。 声明 纯虚函数 没有定义。 如果一个类至少具有一个虚函数,则可以将其声明为抽象。 派生类必须重写纯虚函数才能使用它。 通过在声明中放置“ = 0”来指定纯虚函数