我想我仍然没有完全理解函数定义中的type()表示.所以我不能提出每个案例的具体例子:()=> Int; 单位=>国际.
有人能给我一个简单的函数文字示例,其中type()=> Int并分别键入Unit => Int?在那之后,我想我可以了解究竟是什么().
谢谢
*编辑:*目的地说他们是一样的.但是下面的测试似乎表明不然:()不能用到期望单位.
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 )
Run Code Online (Sandbox Code Playgroud)
Ken*_*oom 17
()在函数类型中根本不是类型,也不是值.() =>只是语法来指示一个零参数的函数.请参阅Scala规范的第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
Run Code Online (Sandbox Code Playgroud)当你进行函数调用时,括号也是函数参数的语法,这是你可能已经意识到的.这些可能是空的.它们在规范的第6.6节中定义.
def.这些在规范的4.6节中描述.TupleN地方N的括号内的值的数量.如果它们为空,则表达式的类型为Unit.(第6.9,12.2.3节)| 归档时间: |
|
| 查看次数: |
1542 次 |
| 最近记录: |