scala学习笔记-方法、函数、方法和函数的区别、方法转换成函数

1:方法
  • 语法:

    def 方法名(参数名:参数类型, 参数名:参数类型) : [return 返回值类型] = {
        // 方法体:一系列的代码
    }
    
  • 说明

    • 参数列表的参数类型不能省略
    • 返回值类型可以省略,由scala编译器自动推断
    • 返回值可以不写return,默认就是{}块表达式的值
  • 示例

    scala> def add(a:Int,b:Int) = a+b
    add: (a: Int, b: Int)Int
    
    scala> add(1,2)
    res8: Int = 3
    
  • 注意事项

    • 如果定义递归方法,不能省略返回值类型
  • 方法参数

    • 默认参数:在定义方法时可以给参数定义一个默认值
      //1. 定义一个计算两个值相加的方法,这两个值默认为0
      //2. 调用该方法
      
      scala> def add(x:Int = 0, y:Int = 0) = x + y
      add: (x: Int, y: Int)Int
      
      scala> add(1)
      res14: Int = 1
      
      scala> add(1,2)
      res15: Int = 3
      
    • 带名参数:在调用方法时,可以指定参数的名称来进行调用
      scala> def add(x:Int = 0, y:Int = 0) = x + y
      add: (x: Int, y: Int)Int
      
      scala> add(x=1)
      res16: Int = 1
      
    • 变长参数:如果方法的参数是不固定的,可以定义一个方法的参数是变长参数
      • 语法:
        def 方法名(参数名:参数类型*):返回值类型 = {
            方法体
        }
        
        //在参数类型后面加一个*号,表示参数可以是0个或者多个
        
      • 示例:
        scala> def add(num:Int*) = num.sum
        add: (num: Int*)Int
        
        scala> add(1,2,3)
        res17: Int = 6
        
2:函数
  • 语法

    val 函数变量名 = (参数名:参数类型, 参数名:参数类型....) => 函数体
    
  • 注意

    • 函数是一个对象(变量)
    • 类似于方法,函数也有输入参数和返回值
    • 函数定义不需要使用def定义
    • 无需指定返回值类型
  • 示例

    scala> val add = (x:Int, y:Int) => x + y
    add: (Int, Int) => Int = <function2>
    
    scala> add(1,2)
    res3: Int = 3
    
    
    //一个函数没有赋予一个变量,则称为匿名函数,
    //后期再实际开发代码的时候,基本上都是使用匿名函数
    (x:Int,y:Int)=>x+y
    
3:方法和函数的区别
  • 方法是隶属于类或者对象的,在运行时,它是加载到JVM的方法区中
  • 可以将函数对象赋值给一个变量,在运行时,它是加载到JVM的堆内存中
  • 函数是一个对象,继承自Function,函数对象有apply,curried,toString,tupled这些方法,而方法则没有
4:方法转换成函数
  • 有时候需要将方法转换为函数,作为变量传递,就需要将方法转换为函数
  • 使用_即可将方法转换为函数
  • 示例
    scala> def add(x:Int,y:Int)=x+y
    add: (x: Int, y: Int)Int
    
    scala> val a = add _
    a: (Int, Int) => Int = <function2>
    
发布了40 篇原创文章 · 获赞 59 · 访问量 1386

猜你喜欢

转载自blog.csdn.net/qq_26719997/article/details/105224080