/**
* 高阶函数
*/
object Study7 extends App{
//函数定义
def add(a:Int ,b:Int) = {
a + b
}
// var c = add(1,2)
// println(c)
//var func1 = add _ //把一个函数的实现传递给另外一个函数
//println(func1(1,2))
//var func2 = (x :Int) => x + 3 //传递一个匿名函数给给一个变量
//var func3 = (x :Int) => {x + 3} //传递一个匿名函数给给一个变量
//var func4 = (x :Int) => (x + 3) //传递一个匿名函数给给一个变量
// for(i <- arr)
// Map[String,Int]("zhangsan" -> 12)
//println(func3(3))
// def func5(a:Int ,f:(Int)=>(Int)) = {
// f(a) + 1
// }
// println(func5(4,(x:Int) => {x + 2})) //传递一个匿名函数给该函数
//调用函数封装举例
// def CPU(a:Int) = {
// a * 8
// }
// def GPU(a:Int) = {
// a + 9
// }
// def compute(men:Int,CPU:(Int)=>(Int),GPU:(Int)=>(Int)) = {
// men + CPU(2) + GPU(2)
// }
// println(compute(4,CPU,GPU))
// def func6(f:(Int)=>(Int)) = {
// f(1)
// }
// println(func6(_ + 2)) //简写条件:1.只有一行代码 2.只有一个形参 3.把匿名函数作为形参
// println(func6(_ + _))
//总结“_” :
// 1.代表数组每一个元素
// 2.指的是传递是确切的一个函数 而不是忘记给该函数传递参数
// 3.元组的元素取值
//思考题
// def func7 (x :Int ,y:Int) = {
// (y : Int) => {
// x + y
// } + 2
// }
// println(func7(3,4)(2))
//一些有用的函数 map foreach reduceLeft
// (1 to 9).map("*" * _).foreach(println _)
// var c = (1 to 3).reduceLeft(_ + _) //1 + 2 + 3
// println(c)
}
/**
* 构造顺序
*/
class Person1 {
val age:Int = 10
var arr:Array[Int] = new Array[Int](age) //调age字段的getter方法
}
//class student1 extends Person1{
// override lazy val age:Int = 18 //如果覆盖的父类不是抽象类 必须要写override
//}
class student1 extends { //解决办法③
override val age:Int = 18 //如果覆盖的父类不是抽象类 必须要写override
} with Person1
//特质
/*trait student2 {
var a:Int = 10
var b:Int
}
trait student3{
def show = "123"
}
class student4 extends student2 with student3{
var b:Int = 1
}*/
object Test72 extends App{
var c = new student1
println(c.age)
println(c.arr.length)
//输出18 0 解决办法:1.字段前面添加final 2.字段前面添加lazy 3.解决办法③
//原因:
// a.主构造器和class类交织在一起
// b.子类中使用了override覆盖超类中的字段,构造子类时超类的字段值会被覆盖
// c.student1类作为student1的主构造器,调用了超类的Person1的主构造器
// d.首先,构造器将age值设置为10
// e.接着代码往下走,为了初始化arr数组,调用了age的getter方法
// f.而age字段被重写了,也就是说getter方法被重写了
// g.被重写的getter方法还没有被初始化,确切说就是字段age还是对象在被分配空间时所有整型字段的初始值
// h.arr数组长度被设置为0
// i.子类Student1类构造器执行,age被赋值为18
}
scala语法 基础3
最新推荐文章于 2022-04-24 19:05:12 发布