scala学习(二)-- 函数

Scala函数

函数的类型和值

函数字面量:literal
函数字面量可以体现函数是编程的核心理念,在函数式编程中,函数是“头等公民”,可以向其他数据类型一样被传递和操作,也就是说,函数的使用方式和其他数据类型的使用方式完全一致。
这是,我们就可以像定义变量那样去定义一个函数,由此导致的结果是,函数也会和其他变量一样,可以有“值”。就像变量的“类型”和“值”是分开的两个概念一样,函数式编程中,函数的“类型”和“值”也成为了两个分开的概念,函数的“值”,就是“函数字面量”

def counter(value: Int): Int = {
    value+=1}
函数的类型:
(Int) => Int //若输入值只有一个,则可省略括号
函数的值
(value) => {
   value+=1} //只有一条语句时,大括号可以省略
按照上面类似的形式来定义Scala中的函数
无法执行,value不可被赋值。参考匿名函数。
val counter: Int => Int = {
    (value) => value += 1} 

占位符语法

为了让函数字面量更加简洁,我们可以使用下划线作为一个或多个参数的占位符,只要每个参数在函数字面量内仅出现一次。

x => x > 0 与 _ > 0等价

可以通过冒号指定占位符的类型

val f = (_: Int) + (_: Int)

Scala函数传名调用

scala的解释器在解析函数参数时有两种方式:

  • 传值调用:先计算参数表达式的值,在应用到函数内部
  • 传名调用:将为计算的参数表达式直接应用到函数内部,每次使用传名调用时,解释器都会计算一次表达式的值。
object Test {
   
   def main(args: Array[String]) {
   
        delayed(time());
   }

   def time() = {
   
      println("获取时间,单位为纳秒")
      System.nanoTime
   }
   def delayed( t: => Long ) = {
   
      println("在 delayed 方法内")
      println("参数: " + t)
   }
}

在这里插入图片描述

def deplayed(t: => Long) 改为 def deplayed(t: Long)

在这里插入图片描述

1.2 Scala指定函数参数名

一般情况下函数调用参数,就按照函数定义时的参数顺序一个个传递。但是我们可以通过指定函数参数名,并且不需要按照顺序向函数传递参数。

1.3 Scala函数-可变参数

Scala允许知名函数的最后一个参数时可以重复的,即我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。
Scala通过在参数的类型之后放一个星号来设置可变参数。

object Test {
   
   def main(args: Array[String]) {
   
        printStrings("Runoob", "Scala", "Python");
   }
   def printStrings( args:String* ) = {
   
      var i : Int = 0;
      for( arg <- args ){
   
         println("Arg value[" + i + "] = " + arg )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值