zoukankan      html  css  js  c++  java
  • scala函数

    Scala除了方法外,还支持函数,方法对对象进行操作,但是函数不是。

    def func(n: String) = 表达式
    如果函数体有多个表达式,则可以使用代码块,代码块的最后一个表达式的值就是 函数的返回值
    def func(n: String) = { }

     在函数中,并不需要 return来返回值,而且只要函数不是递归的,可以不用指定返回类型,如果是递归函数,则必须要指定返回类型

    def fac(n: Int): Int = if (n<0) n=1 else n*fac(n-1)

    默认参数

    def decorate(str: String,left: String="[",right: String="]") = left + str + right

     相对参数的个数不够,默认参数从后往前逐个应用进来

    decorate("Hello",">>>[") // >>>[Hello]

    带名参数

    提供参数值的时候,可以执行参数名,指定参数名的时候,参数的顺序可以不和函数定义时的完全一致

    decorate(left="<<<",str="hello",right=">>>")

    变长参数

    可以接受可变长度参数列表的函数

    def  sum(args: Int*) = {
        var result = 0
        for(arg <- args) result+=arg
        result   
    }
    
    val = sum(1,3,4,7,25) 函数得到是一个seq类型
    
    如果有一个值序列,不能直接传入函数中  val = sum(1 to 5) //错误
    
    如果sum传入单个参数,那么改参数必须要是单个整数,而不是整数区间,如果希望这个参数作为参数当做参数序列处理,需要加上 :_*
    
    val s = sum(1 to 5: _*)
     
    过程
    过程就是没有返回值的函数,函数体代码块前没有=,(认为返回值是 Unit类型)
      def box(s: String){
         var border = "-"*s.length() + "--
    "
         println(border + "|" + s + "|
    " + border)
       }

    或者

    def box(s: String): Unit = {
         var border = "-"*s.length() + "--
    "
         println(border + "|" + s + "|
    " + border)
       }

    懒值

    当val 被声明为lazy的时候,它的初始化将会被推迟,知道首次使用对它取值

    lazy val words = scala.io.Source.fromFile("/opt/words").mkString

    懒值可以认为是介于 val def 的中间状态

    val words = scala.io.Source.fromFile("/opt/words").mkString //words被定义的时候被取值
    
    lazy val words = scala.io.Source.fromFile("/opt/words").mkString //words首次被使用时被取值
    
    def words = scala.io.Source.fromFile("/opt/words").mkString  //words每次被使用的被取值

    懒值并不是没有额外的开销,每次访问懒值,都会有一个方法被调用,这个方法以线程安全的方式检查该值是否被初始化。

  • 相关阅读:
    材料用词积累
    SqlServer 数据库/数据表 拆分(分布式)【转】
    SqlServer 数据库读写分离【转】
    (整理)在REHL6.5上部署ASP.NET MVC
    (整理)MySQL_REHL6.5 安装MySQL5.5
    (转)查看SQLServer最耗资源时间的SQL语句
    (转)SQLServer查询数据库各种历史记录
    (转)SqlServer2008 数据库同步:发布、订阅
    (整理)SQL Server 2008 CDC 功能使用
    (整理)EF分页的实现
  • 原文地址:https://www.cnblogs.com/xiaojianfeng/p/9790940.html
Copyright © 2011-2022 走看看