设为首页 加入收藏

TOP

scala的传名参数
2017-10-10 12:13:13 】 浏览:7466
Tags:scala 参数

scala如果你想实现像if ,while等类似的控制结构,根本没有值要传入花括号{}直接的代码里。要怎么实现。

比如说,我们要实现一个断言的控制结构,myAssert(), myAssert函数参考自带参数和一个标示变量,如果标示位为false,则什么都不做,如果为true则进行正常判断。

下面是一种合理的实现:

 val assertionEnable = true 
 def myAssert( predicate: () => Boolean) = 
    if(assertionEnable && ! predicate()) throw new AssertionError

//myAssert函数的定义是合法的,也实现了这个功能,但是使用者的代码比较难看,
    myAssert( () => 5>3)
//省略函数字面量的参数列表()和 =>之后,就比较好了。
//    myAssert(   5>3)  //不会有效,因为缺少 () =>

省略函数字面量的参数列表()和 =>之后,就比较好了,但是会报编译错误。

scala的传名参数可以实现我们的愿望,传名参数的定义:要开始于=> 而不是 () => ;这样就可以实现我们的

需求。定义了传名参数的函数就是传名函数。

  def byNameAssert( predicate: => Boolean) = 
    if(assertionEnable && ! predicate) throw new AssertionError
byNameAssert(5>3)  //有效 

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Scalaz(34)- Free :算法-Int.. 下一篇Scalaz(35)- Free :运算-Tra..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目