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每次被使用的被取值

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

  • 相关阅读:
    [CentOS]Centos设置网卡
    [C#]创建Windows用户及组
    [C#]读取指定路径的配置文件[转]
    [C#]安装WindowsService的关键步骤
    [C#]如何解决修改注册表受限问题(转)
    [C#]DES再一例(转)
    [C#]获取当前程序运行路径的方法集合(转)
    [Postgres]Postgres复制表
    [Postgres]postgresql.conf : Permission denied处理一法
    【转】/proc/sysrq-trigger 详解
  • 原文地址:https://www.cnblogs.com/xiaojianfeng/p/9790940.html
Copyright © 2011-2022 走看看