Scala入门------Scala函数操作

这篇博客介绍了Scala中的函数操作,包括函数传名调用、指定参数名、可变参数、递归函数、默认参数值、高阶函数、内嵌函数、匿名函数、偏应用函数和函数柯里化等特性。通过示例代码,详细讲解了每种函数操作的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scala函数
    1.函数传名调用
        Scala的解析器在解析函数参数(Function arguments)时有俩种方式:
            a.传值调用(call-by-value):先计算参数表达式的值,再应用到内部函数;
            b.传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部
            在函数的变量名和变量类型使用 => 符号来设置传名调用
    
    2.指定函数参数名
        调用带有参数的函数时,可以不一定要按照函数设置参数顺序来传参,可以根据函数的参数名来乱顺序传参

    3.函数-可变参数
        Scala通过在参数的类型之后放一个 * 号来设置可变参数(参数类型不变,参数个数可变,可传重复值)

    4.递归函数
        Scala也可以自己写递归函数

    5.默认参数值
        定义函数时在定义参数上可设置默认值

    6.高阶函数
        高阶函数就是操作其他函数的函数,Scala中允许使用高阶函数,高阶函数可以使用其他函数作为参数,或者用函数作为输出结果

    7.内嵌函数
        函数里面定义函数

    8.匿名函数
        列如 var a = def(i:Int , b:Int): Int = a+b就是一个匿名函数

    9.偏应用函数
        看列子:
            def log(date: lang.uitl.Date,message:String): String = {data+"---"+message} //定义一个函数
            def main(agrs: Array[String]){
                Date date = new Date();
                var a = log(date, _:String);
                println(a("message1"));
                println(a("message2"));
                println(a("message3"));
            }
            上面例子中 var a = log(date , _: String)就是偏应用函数    _: 就是偏应用函数的代表
                
    10.函数柯里化(Funciton Currying)
        看例子:
            def sum(a: Int , b: Int): Int=a+b //一个十分普通的Scala函数
            def sum(a:Int)(b:Int): Int = a+b  //被柯里化的函数

以下便是Scala函数的一些代码

package com.uitl

import java.util.Date


object MyFunction {
  //1.函数传名调用
  def time1(): Long = {
    println("获取时间,单位为纳秒");
    System.nanoTime();
  }

  //用来与time3做比较
  def time2(i: Long): Long = {
    println("在time2()")
    println("参数" + i)
    i
  }

  //用来与time2做比较
  def time3(i: => Long): Unit = {
    println("在time3()")
    println("参数" + i)
    i
  }

  //指定函数参数名
  def sum(a: Int, b: Int): Int = {
    a + b
  }

  //可变参数
  def example1(string: String*): Unit = {
    println(string)
  }

  //递归
  def example2(i: Int): Int = {
    if (i <= 0)
      1
    else
      i + example2(i - 1)
  }

  //默认参数值
  def example3(i: Int = 500): Int = i

  //高阶函数 这里的A相当于Java中的泛型 也可以指定类型 一个函数也是一个类型
  def example4[A](a: A): A = a

  //给example4调用
  def example5(i: Int): Int = i

  //内嵌函数
  def example6(int1: Int): Int = {
    def example7(int2: Int): Int = {
      int1 + int2
    }

    example7(int1);
  }

  //匿名函数 注意定义方式 =>
  var example8 = (a: Int, b: Int) => a + b

  //偏应用函数
  def example9(date: Date, string: String): String = "时间:" + date + "----------" + "你所输入的字符串:" + string

  //函数柯里化
  def example10(a: Int, b: Int): Int = a * b //普通Scala函数
  def example11(a: Int)(b: Int): Int = a * b //被柯里化的函数

  def main(args: Array[String]): Unit = {
    //函数传名调用
    time2(time1());
    println("----------")
    time3(time1());

    //指定函数参数名 可以不安顺序传参
    println(sum(b = 10, a = 50))

    //可变参数
    example1("World", "Wide", "Web")

    //递归
    println(example2(100))

    //默认参数值
    println(example3())

    //高阶函数
    println(example4(example5(5)));

    //内嵌函数
    println(example6(5));

    //匿名函数
    print(example8(1, 5));

    //偏应用函数是在调用的时候于其他的不一样
    var date = new Date();
    //非偏应用
    println(example9(date, "打你哟1"))
    println(example9(date, "打你哟2"))
    println(example9(date, "打你哟3"))
    println("----------")
    //偏引用后  _: 俩符号代表偏应用
    var string = example9(date, _: String);
    println(string("打你哟1"));
    println(string("打你哟2"));
    println(string("打你哟3"));

    //函数柯里化
    println(example10(10, 12));
    println(example11(10)(12));
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值