Scala 方法和函数

package com.bigdata

//
/** Scala 方法和函数:Scala中既有函数也有方法,大多数情况下我们都可以不去理会他们之间的区别。
  *
  * 方法:Scala 中的方法跟 Java 的方法一样,只是多了点语法糖。
  * 方法是组成类的一部分。方法有名字、类型签名,有时方法上还有注解,以及方法的功能实现代码(字节码)。
  *
  * 函数 :Scala 中的函数是一个完整的对象,是基于Function家族,0-22,一共23个Function Trait可以被使用,数字代表了Funtcion的入参个数
  * 作用:1.函数可以直接赋值给变量,可以让函数很方便的传递;
  *      2.闭包(closure),可以把灵活操作代码块,从而引申出其他灵活的语法
  *
  * apply 是 scala 中的语法糖:对一个对象 obj 上调用 obj(),scala 编译器会转换为 obj.apply();
  * 在一个类 clazz 上调用 clazz(),scala 编译器会转换为 clazz_company_obj.apply(),其中 clazz_company_obj 为 clazz 的伴生对象。
  *
  * 方法和函数的区别:
  * 1.方法不能作为单独的表达式而存在(参数为空的方法除外),而函数可以
  * 2.函数必须要有参数列表,而方法可以没有参数列表
  * 3.方法名是方法调用,而函数名只是代表函数对象本身+--
  * 4.在需要函数的地方,如果传递一个方法,会自动进行ETA展开(把方法转换为函数)
  * 5.传名参数本质上是个方法
  *
  */

object Func {

  //比如无参方法在申明时可以不加括号,甚至在调用过程也不用加括号
  def f1 = 1 + 1

  //比如方法可以添加泛型规则,这在java中只能在类申明
  def f2[T](t: T) = {
    t
  }

  //本地方法,即方法中嵌套方法
  def method(): Unit = {
    def print(str: String): Unit = {
      println(str)
    }

    print("hello")
  }

  //一般采用下面方式定义函数
  val fun = (v1: Int, v2: Int) => v1 + v2

  def main(args: Array[String]): Unit = {
    println(f1)
    println(f2(1))
    method

    val s1 = fun(1,2)
    println(s1)

  }

}

 

posted @ 2019-02-15 13:52  时光快照  阅读(242)  评论(0编辑  收藏  举报