scala中定义函数的几种方法
①函数的本质就是引用类型,相当于Java中的new出来的实例;函数是在堆内存中新开辟的一片空间;
②定义的函数一定要有输入和返回值;
③scala方法的返回值一定是放在一个整体里的;(例如:元组)
④没有返回值相当于返回的是Unit;
⑤调用函数其实是调用函数里面的apply方法来执行逻辑;
⑥scala的编译期可以自动推断类型;
⑦tuple其实使用了语法糖。
package java_scala
object FunctionTest {
def main(args: Array[String]): Unit = {
//下面是scala中定义一个函数的几种方法
val i = 10 //自动推断类型
val j: Int = 10
val f2 = (x: Int, y: Double) => (y, x) //省略函数类型,scala编译器可以自动推荐类型
val f3: (Int, Double) => (Double, Int) = (x, y) => (y, x)
val f4 = new Function2[Int, Double, (Double, Int)] {
override def apply(v1: Int, v2: Double): (Double, Int) = {
(v2, v1)
}
}
val f5: Function2[Int, Double, (Double, Int)] = new Function2[Int, Double, (Double, Int)] {
override def apply(v1: Int, v2: Double): (Double, Int) = {
(v2, v1)
}
}
val f6: (Int, Double) => (Double, Int) = new Function2[Int, Double, (Double, Int)] {
override def apply(v1: Int, v2: Double): (Double, Int) = {
(v2, v1)
}
}
val f7 = new ((Int, Double) => (Double, Int)) {
override def apply(v1: Int, v2: Double): Tuple2[Double, Int] = {
new Tuple2[Double, Int](v2, v1)
}
}
}
}