zoukankan      html  css  js  c++  java
  • 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)  //有效 
    
  • 相关阅读:
    SOA设计模式
    MVC架构设计模式
    12周总结
    11周总结
    window环境pycharm中使用cityscapes数据集训练deeplabv3+经验总结
    分析六大质量属性战术
    《一线架构师实践指南》第三章阅读笔记
    pip install 无法安装cv2
    PHP disable_functions Bypass
    MallBuilder逻辑后门(复现)
  • 原文地址:https://www.cnblogs.com/honeybee/p/5302643.html
Copyright © 2011-2022 走看看