Scala ()=>;之间的区别是什么;整数和单位=>;智力?究竟什么类型的「;()";在斯卡拉?
我想我还没有完全理解在函数定义过程中类型()代表什么。所以我不能给出每种情况的具体例子:()=>Int;单位=>Int 有人能给我一个简单的例子,分别是type()=>Int和type Unit=>Int的函数literal吗?在那之后,我想我可以知道()到底是什么 谢谢 *编辑:*destin说他们是一样的。但下面的测试似乎表明情况并非如此:()不能在预期单元中使用Scala ()=>;之间的区别是什么;整数和单位=>;智力?究竟什么类型的「;()";在斯卡拉?,scala,Scala,我想我还没有完全理解在函数定义过程中类型()代表什么。所以我不能给出每种情况的具体例子:()=>Int;单位=>Int 有人能给我一个简单的例子,分别是type()=>Int和type Unit=>Int的函数literal吗?在那之后,我想我可以知道()到底是什么 谢谢 *编辑:*destin说他们是一样的。但下面的测试似乎表明情况并非如此:()不能在预期单元中使用 scala> def inCase[A] ( b :Boolean, ifTrue : Unit => A, ifF
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 )
scala>def inCase[A](b:Boolean,如果真:单位=>A,如果假:单位=>A):A=
|b比赛{
|大小写为True=>ifTrue()
|案例=>ifFalse()
| }
例如:[A](b:Boolean,如果真:单位=>A,如果假:单位=>A)A
scala>inCase(True,()=>1,()=>1)
:11:错误:类型不匹配;
找到:()=>Int
必需:单位=>?
例如(True,()=>1,()=>-1)
函数类型中的
()
根本不是类型,也不是值()=>
是一种简单的语法,用于指示接受零参数的函数。参见本规范第3.2.9节中的BNF符号
当您看到(Type1,Type2,Type3)=>Type4
时,()
包围了函数采用的所有参数类型(Type1,Type2,Type3)
在这里不是元组类型——括号只是语法。因此,当您看到()=>Type4
时,您有一个参数列表,它接受零个参数。单参数函数很特殊,因为可以省略括号
没有参数的函数,在没有()
的情况下指定,只是=>Type4
是按名称参数(看起来像值,但实现为函数,当您尝试计算其值时会隐式调用)。它们在规范的第4.6.1节中定义
在其他上下文中,括号可以表示一系列其他内容
- 函数类型声明中除
前面的括号之外的任何位置都表示元组类型,并且不能为空。(第3.2.5节)=>
- 空括号
是返回类型为()
的函数的返回值。(第12.2.3节)在某些上下文中,这实际上是一个实际值,例如Unit
将打印println(println(“foo”)
foo <--- the argument to the inner println () <--- the argument to the outer println
foo我更改了您的示例,使其同时具有两种符号(并使用更流行的布尔值): 然后我必须在调用站点上使用相同的符号
是类型()
单元的唯一实例。
因此,
作为部分函数的签名意味着:获取单元对象,做一些事情并给出一个Int。()=>Int
的意思是:获取任何单位对象,做某事并给出一个Int 编辑 “Scala的单元类型大致对应于Java中的void;每当函数不返回有趣的结果时,就会使用它。事实上,因为Scala是一种面向表达式的语言,所以每个函数都会返回一些结果。如果没有给出显式的返回表达式,则假定值(),发音为“Unit”。此值为 单位类型。单位返回函数也称为过程。下面是一个 在第一次实施中,交换功能的“表达导向”表述 对于快速排序,这使其明确: 此函数的结果值只是它的最后一个表达式–返回关键字为 不需要。请注意,返回显式值的函数始终需要“=” 在他们的身体或表情之前。”Unit=>Int
资料来源:Scala-Martin Odersky编程(第14页)您在寻找int或Unit的返回类型吗?听起来像,但我想确定一下。我正在寻找Int.No的返回类型
表示不带参数并返回Int的函数。您的引用是正确的,但与主题无关。在函数的类型签名中,()=>Int
表示没有映射到函数0的参数。如果定义()
计算结果为42。但奇怪的是,valf:()=>Int=()=>12,然后用一个单位参数调用它,它将不起作用:尝试
和f()
f(())
的计算结果为42<代码>{val g:()=>Int=(()=>42);g()}{valf:unit=>Int=((x:unit)=>42);f(())
也编译并计算为42。我会认为,由于我传递了h零参数而不是一个,这将是一个编译时错误。而且,有趣的是,{valh:Unit=>Int=((x:Unit)=>42);h()}
给出了一个“没有足够的参数用于方法应用”,而不是一个类型错误。因此,似乎有一种特殊情况,将0个参数传递给域为{val k:Int=>Int=((a:Int)=>42);k()}
的1个参数函数。Unit
def inCase[A] (b:Boolean, ifTrue: ()=> A, ifFalse: Unit => A): A = b match { case true => ifTrue () case _ => ifFalse () } inCase (true, () => 1, (Unit) => -1)
def swap(i: Int, j: Int): Unit = { val t = xs(i); xs(i) = xs(j); xs(j) = t () }