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

Scala中 => Unit 与 () =>Unit的区别

发布时间:2020-12-16 19:18:15 所属栏目:安全 来源:网络整理
导读:() = Unit --- 是一个函数; = Unit ?-- 是一个执行结果为Unit的表达式 code: = Unit 是 by name 传递参数。参数是一个返回值为 Unit 的代码块。在传递的时候,参数没有被调用。比如: def test(code : = Unit){ println( " start " ) code // 这行才会调用

() => Unit ---> 是一个函数;
=> Unit?--> 是一个执行结果为Unit的表达式

code: => Unitby name 传递参数。参数是一个返回值为Unit的代码块。在传递的时候,参数没有被调用。比如:

def test(code : => Unit){ println("start") code // 这行才会调用传入的代码块,写成code()亦可 
  println("end") } test{// 此处的代码块不会马上被调用 
  println("when evaluated") println("bb") }

结果

start 
when evaluated 
bb 
end

注意:when evaluated被打印在了startend中间。

code: ()=>Unit参数的类型,是一个没有参数而且返回值为Unit的函数类型。

def test1(code: ()=>Unit){ println("start") code() // 要想调用传入的代码块,必须写成code(),否则不会调用。 
  println("end") } test1 {//此代码块,传入后立即执行。 
println("when evaluated") ()=>{println("bb")} }

结果:

when evaluated 
start 
bb 
end

注意:when evaluated被打印在了start之前。

实际上,在第二例当中,test1的参数是一个表达式。在Scala中,如果将要传入的参数正好是一个,则可以用花括号。这时候test1的参数列表是一个表达式,而这个表达式的结果是最后一行的返回,也就是一个函数() => { println("bb") },它被传给了test1的唯一参数。然后test1方法体执行。至于为什么when evaluated在另外三行之前,是因为它是在传参的时候,求表达式值的副产物。

其实code :=> Unit就是code : () => Unit,只是第一种是按传参,用花括号可以把花括号内的所有东西作为一个函数传给code;第二种就是普通传参,但是它刚好只有一个参数。这时候用了花括号,就是花括号内表达式的值传进去了。

最后,提供对等用例

object FunctionTest2 { def main(args: Array[String]) { def test(code: => Unit) { println("start") code println("end") } test { println("when evaluated") println("bb") } def test1(code: () => Unit) { println("start") code() println("end") } test1 { () => println("when evaluated") println("bb") } } }

(编辑:李大同)

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

    推荐文章
      热点阅读