1、scala可以跑在JVM上和.net上
2、scala的重中之重就是函数式编程
3、高阶函数的两个层面-函数的参数是函数;函数的返回值是函数
//函数的参数是函数
def bigData(func:(String) => Unit,content:String) {func(content)} //这里Unit是函数返回类型
调用
bigData(hiScala,"Spark") //结果Spark
//将匿名函数赋值给函数
def func_Returnned(content: String) = (message: String) => println(content + " " + message) //函数的返回值是 函数
4、//只有一个参数的匿名函数可以省略掉包围参数的小括号;参数相对应的函数体只使用一次参数时,参数名称 可以省略,用_代替
def spark(func: (String) => Unit,name: String) {func(name)}
spark((name:String) => println(name),"scala")
Spark(name => println(name),"Scala") //省掉String
Spark(println(_),"Scala") //这样写也是对的
Spark(println,"Scala") //这样写也是对的
5、闭包
函数的变量超出其有效作用域时还能被外部访问就是闭包。也就是说变量会被保留在函数体内部,被反复使用
闭包随处可见
创建function对象,把content这个变量存在对象里。函数的返回值是这个对象,当调用这个函数时就可以使用这 个对象所携带的变量。
实质是函数维护了函数体内的状态变量 //java中类似的实现是new一个接口然后回调。sam转换
6、