加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

()=> Int和Unit => Int有什么区别? Scala中的“()”类型

发布时间:2020-12-16 09:12:49 所属栏目:安全 来源:网络整理
导读:我想我还没有完全理解在函数定义中的type()表示.所以我不能提出每个案例的具体例子:()=诠释;单位=诠释. 有人可以给我一个简单的例子,函数文字类型为()= Int和类型Unit = Int分别?之后,我想我可以学习()是什么. 谢谢 *编辑:* destin说他们是一样的.但是以
我想我还没有完全理解在函数定义中的type()表示.所以我不能提出每个案例的具体例子:()=>诠释;单位=>诠释.

有人可以给我一个简单的例子,函数文字类型为()=> 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 )

解决方法

()在函数类型中根本不是类型,也不是一个值. ()=>只是语法来指示一个取零参数的函数.参见 the Scala specification.第3.2.9节中的BNF符号

当你看到(Type1,Type2,Type3)=> Type4,()包围函数所需的所有参数类型. (Type1,Type3)这里不是一个元组类型 – 括号只是语法.所以当你看到()=> Type4,您有一个参数列表,其参数为零.单参数函数是特殊的,因为您可以省略括号.

没有参数的函数,没有指定(),简单=> Type4是名称参数(看起来像值,但实现为在尝试评估其值时隐式调用的函数).它们在规范的第4.6.1节中定义.

括号可能意味着其他情况下的其他一些事情.

>括号在函数类型声明之外的任何地方,而不是在=>之前表示一个元组类型,这些不能为空. (第3.2.5节)
>空括号()是返回类型为Unit的函数的返回值. (第12.2.3节)这实际上成为某些上下文中的实际值,例如println(print(n))将打印

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节)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读