Scala的高阶函数、类、对象、方法和构造器
高阶函数
定义:使用函数作为参数的方法,叫做高阶函数
示例:
//作为参数的函数
def main(args: Array[String]): Unit = {
val myFunc=(x:Int) =>{
x * x }
//方法就是函数,函数也是一个对象
// val myArray = Array(1,3,5,7,9).map(x => x* x )
//val myArray = Array(1,3,5,7,9).map(myFunc)
//如果集合当中每一个元素传入到函数里面去只用了一次那么就可以用_ 代替掉
val myArray = Array(1,3,5,7,9).map(_*2)
println(myArray.mkString(","))
}*/
//匿名函数没有名字的函数
def main(args: Array[String]): Unit = {
//function2
println((x:Int,y:Int) => {
x * y})
}
//高阶函数,接收一个函数作为参数的方法,叫做高阶函数
def main(args: Array[String]): Unit = {
val func3:(String,Int) =>(Int,String) ={
(x,y) => (y,x)
}
def myMethod3(hello:(String,Int) => (Int,String)):Int ={
val hello1: (Int, String) = hello("zhangsan",60)
hello1._1
}
val method: Int = myMethod3(func3)
println(method)
}
//高阶函数,作为一个方法的返回类型
//方法的返回值是一个函数
def main(args: Array[String]): Unit = {
def myFunc4(x:Int) = {
//方法的最后的返回值,是一个匿名函数
(y:String) => y
}
println(myFunc4(50))
}
柯里化 柯里化定义形式
def main(args: Array[String]): Unit = {
//柯里化的定义形式
def kery(x:Int)(y:Int):Int ={
x + y
}
val kery1: Int = kery(30)(20)
// println(kery1)
//这个函数执行完成之后,得到一个什么样的函数 y:Int =>Int
val keryResult = (x:Int) => {
(y:Int) => {
x + y}
}
//keryResult(20) ==》 匿名函数 y:Int => 20 + y 《====1,3,5,7,9
val myArray = Array(1,3,5,7,9).map(keryResult(20) )
println(myArray.toBuffer)
//柯里化是scala面向函数式编程,必然导致的一种结果
def keryMethod(x:Int) ={
//里面的函数,将外面的参数包起来了,里面的函数对外面的参数叫做闭包
y:Int => {
x + y}
}
}
scala当中的类
定义class类
class Person {
//定义一个属性,叫做name的,使用val不可变量来进行修饰
// 用val修饰的变量是可读属性,有getter但没有setter(相当与Java中用final修饰的变量)
var name:String ="zhangsan"
//定义一个属性,叫做age的,使用var可变量来进行修饰
//用var修饰的变量都既有getter,又有setter
var age:Int = 28
//类私有字段,只能在类的内部使用或者伴生对象中访问
private val address:String = "地球上"
//类私有字段,访问权限更加严格的,该字段在当前类中被访问
//在伴生对象里面也不可以访问
private[this] var pet = "小强"
//在类当中定义了一个方法,
def hello(first:Int,second:String):Int ={
println(first+"\t"+second)
}
/**
* 定义了一个函数
*/
val fun