()=> Int和Unit => Int有什么区别? Scala中的“()”类型
我想我还没有完全理解在函数定义中的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节) 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节) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |