Int;单位=>整数。 有人能给我一个简单的函数文字示例吗?分别是类型 () => Int 和类型 -6ren">
gpt4 book ai didi

scala - () => Int 和 Unit => Int 之间有什么区别? Scala 中的 "()"到底是什么类型?

转载 作者:行者123 更新时间:2023-12-03 03:48:11 24 4
gpt4 key购买 nike

我想我还没有完全理解函数定义时type()代表什么。所以我无法给出每种情况的具体例子: () => Int;单位=>整数。

有人能给我一个简单的函数文字示例吗?分别是类型 () => Int 和类型 Unit=>Int?之后,我想我可以了解 () 到底是什么。

谢谢

*编辑:* destin 说它们是相同的。但以下测试似乎表明不然: () 不能在需要 Unit 的地方使用。

scala> def inCase[A] ( b :Boolean, ifTrue : Unit => A, ifFalse : Unit => A ) : A  = 
| b match {
| case True => ifTrue()
| case _ => ifFalse()
| }

inCase: [A](b: Boolean, ifTrue: Unit => A, ifFalse: Unit => A)A


scala> inCase( True, () => 1, () => -1 )
<console>:11: error: type mismatch;
found : () => Int
required: Unit => ?
inCase( True, () => 1, () => -1 )

最佳答案

函数类型中的

() 根本不是类型,也不是值。 () => 是指示采用零参数的函数的简单语法。请参阅 the Scala specification. 第 3.2.9 节中的 BNF 表示法

当您看到 (Type1, Type2, Type3) => Type4 时,() 包围了该函数采用的所有参数类型。 (Type1, Type2, Type3) 这里不是元组类型——括号只是语法。因此,当您看到 () => Type4 时,您就有一个采用零个参数的参数列表。单参数函数很特殊,因为您可以省略括号。

不带参数的函数,不使用 () 指定,只是 => Type4 是按名称参数(看起来像值,但实现为获取当您尝试评估它们的值时隐式调用。)它们在规范的第 4.6.1 节中定义。

括号在其他上下文中可能表示许多其他含义。

  • 函数类型声明中除 => 之前以外的任何地方的括号都指示元组类型,并且这些括号不能为空。 (第3.2.5节)
  • 空括号()是返回类型为Unit的函数的返回值。 (第 12.2.3 节)这实际上在某些上下文中成为实际值,例如 println(println("foo")) 将打印

    foo                 <--- the argument to the inner println
    () <--- the argument to the outer println
  • 当您进行函数调用时,括号也是函数参数的语法,您可能已经知道这一点。这些可以为空。它们在规范第 6.6 节中定义。

  • 当您使用 def 定义方法时,括号也是函数参数的语法。规范第 4.6 节对此进行了描述。
  • 括号也是创建元组值的语法(第 6.9 节)。如果它们不为空,您将得到一个 TupleN,其中 N 是括号内的值的数量。如果它们为空,则该表达式的类型为 Unit。 (第 6.9、12.2.3 节)

关于scala - () => Int 和 Unit => Int 之间有什么区别? Scala 中的 "()"到底是什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com