构造器

在定义类时可以定义主构造器。主构造器可以同时声明字段。

 /**
* 主构造器
* @author Administrator
*/
//在scala中,类和方法交织在一起
class TestClass51(val name:String = "" ,val age:Int = 0){ println("name="+ name + " age=" + age) } object TestScala51 {
def main(args: Array[String]): Unit = {
val c = new TestClass51(age = 18)
}
}
 /**
* 辅助构造器
* @author Administrator
*/
//在scala中,类和方法交织在一起
class TestClass52(){
var name:String = ""
var age:Int = 0 def this(name:String){
this() //第一行调用主构造器
this.name = name
} def this(name:String , age:Int){
this(name) //第一行必须调用主构造器或者其他辅助构造器
this.age = age
}
// println("name="+ name + " age=" + age) } object TestScala52 {
def main(args: Array[String]): Unit = {
val c = new TestClass52("zhangsan",20)
println(c.name)
println(c.age)
}
}

高阶函数

函数可以赋给变量 首先,在scala中,函数是一等公民。

匿名函数 函数的形式是 (形参列表)=>返回值类型

函数作为形参

既然函数可以作为参数,那么在调用的时候我们会传递函数的变量过去。那么,我们可以省略函数的定义,在调用的时候直接把函数的实现(即匿名函数)过去。

函数作为形参 对于只有一个参数的,可以只写函数体。 fun3(a=>a+2) 如果形参只有一个,可以在函数体中使用_代替。 fun3(_+2) 函数作为形参的终极版本。

把匿名函数放在函数体内

 /**
* 高阶函数 要为spark做铺垫的话一定要讲高阶函数
* Scala中的语法很灵活,公司要自己统一开发规范. 声明方法可以用def 还可以用val和var
* @author Administrator
*/
object TestScala53 {
def main(args: Array[String]): Unit = {
//================================================================
//在scala中把函数称之为一等公民
def add(a:Int , b:Int) = {
a + b
}
val c = add(3,2)
println(c)//打印5
//================================================================ //需求 将一个函数的实现传递给另外函数
//应用场景:将一个函数指定另外一个别名;传递函数的实现给另外的函数
def func1 = add _ //指的是将一个函数的实现传递给另外一个函数 而不是忘记了给该函数传递参数
println(func1(1,3))//打印4 //================================================================ def func2 = (x:Int) => {x + 2} //匿名函数
println(func2(100))//打印102 //================================================================ //定义一个接收函数的函数
def func3(f:(Int) => Int) = {
f(100) * 2
} def func4(a:Int) = {
a + 1
}
println(func3(func4 _))//打印202 (100+1)*2 传递一个已有的函数给func3 println(func3((x:Int) => x + 10))//打印 220 (100+10)*2=220 将一个匿名函数传递给func3 //Scala中总有一些你意想不到的写法
println(func3((x) => x + 10))//打印 220 简写一 类型简写,去掉Int类型 x的类型,程序自己推断
println(func3( x => x + 10 ))//打印 220 简写二
println(func3(_ + 10)) //打印 220 简写三 /*
以上简写的条件
1.匿名函数作为参数
2.只有一行代码
*/
//================================================================ def func5(f:(Int,Int) => Int) = {
f(2,3)
}
println(func5((x:Int,y:Int) => x + y))//打印5
println(func5((x,y) => x + y)) //打印5 简写一
println(func5(_ + _)) //打印5 简写二 /*
总结“_” 所能代表的意义
1、用于取元组值
2、代表一个占位符
3、指的是将一个函数的实现传递给另外一个函数 而不是忘记了给该函数传递参数
4、代表符合条件的每一个元素
*/ //================================================================ /*常见的高阶函数*/
//1.filter map
var d = (1 to 10).filter( _ % 2 == 1).map(_ * 3)
println(d.mkString(","))//打印 3,9,15,21,27
//filter( _ % 2 == 1) 过滤出1,3,5,7,9 var e = (1 to 10).filterNot( _ % 2 == 1)
println(e.mkString(","))//打印 2,4,6,8,10 var f = (1 to 10).reduceLeft(_ + _)//reduceLeft是左累加 1+2 3+3 6+4 .....(1+2+3+...+10=55)
println(f)//打印 55 (1 to 10).map("*" * _).foreach(println _)
//foreach是操作前面产生的每个元素
/*
打印输出
*
**
***
****
*****
******
*******
********
*********
**********
*/ //================================================================ //练习
def func6(x:Int) = {
(x:Int) => {
x + 2
} * 2
}
println(func6(1))//打印输出 <function1> 传递进去参数之后就一个函数.
println(func6(1)(2))//打印输出8 (如果把x:Int改成y:Int 就会输出6)就近原则
}
}

Scala中的构造器和高阶函数的更多相关文章

  1. python中的两个高阶函数map()和reduce()

    1.map()传入的有两个参数,函数和可迭代对象(Itreable),map()是把传入的函数依次作用于序列的每个元素,结果返回的是一个新的可迭代对象(Iterable). map()代码如下: # ...

  2. 【SICP归纳】2 高阶函数和数据抽象

    上一篇博文相应的是书中的第一章的一二两节,我们已经大致的有了一种构造的感觉不是么. 书中展示了非常多有趣的句法(syntax). 如今我们要让思想进一步的抽象.写这篇博客的时候并未学完整本书.更不敢说 ...

  3. Python 编程基础之高阶函数篇(一)

      高阶函数:能接受函数作为参数的函数. 如: f=abs def   add(x,y,f): return f(x)+f(y) 如果我们用:add(-5,9,f)来调用该高阶函数,则返回结果为:14 ...

  4. python笔记十三(高阶函数、装饰器)

    一.高阶函数 函数只要有以下两个特征中一个就可以称为高阶函数: a:函数名作为一个实参传入另一个函数中 b:函数的返回值中包含函数名 下面我们用代码来感受一下这两种形式: import time # ...

  5. Swift 烧脑体操(三) - 高阶函数

    前言 Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说更加困 ...

  6. python高阶函数的使用

    目录 python高阶函数的使用 1.map 2.reduce 3.filter 4.sorted 5.小结 python高阶函数的使用 1.map Python内建了map()函数,map()函数接 ...

  7. 浅谈JS高阶函数

    引入 我们都知道函数是被设计为执行特定任务的代码块,会在某代码调用它时被执行,获得返回值或者实现其他功能.函数有函数名和参数,而函数参数是当调用函数接收的真实的值. 今天要说的高阶函数的英文为High ...

  8. python 高阶函数之filter

    前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter. 先看一下filter() 函数签名 >>> ...

  9. scala中的高阶函数

    版权申明:转载请注明出处. 文章来源:http://bigdataer.net/?p=332 排版乱?请移步原文获得更好阅读体验 1.scala中的函数 scala是一门面向对象和函数式编程相结合的语 ...

随机推荐

  1. POJ 2185 Milking Grid(KMP)

    Milking Grid Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 4738   Accepted: 1978 Desc ...

  2. codeforces 630A Again Twenty Five!

    A. Again Twenty Five! time limit per test 0.5 seconds memory limit per test 64 megabytes input stand ...

  3. 应用完全启动后, Spring执行自定义初始化

    项目中做敏感词过滤, 因为前台ajax校验要走service ,而后台统一过滤器要走interceptor , 所以把检查器提到一个工具类(HeXieWordFinder)里 这个工具类理应缓存数据库 ...

  4. python常用字符串操作

    #!/usr/bin/env python name='cunzhang' print(name.capitalize())#首字母大写 print(name.count('n'))#统计字符有几个 ...

  5. 《JavaScript高级程序设计》 读书笔记(二)

    数据类型 ECMAScript 中有 5 种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和 String.还有 1 种复杂数据类型--Object,O ...

  6. android中broadcastreceiver的用法-manifest中注册。

    package com.jinhoward.broadcast.activity; import com.jinhoward.broadcast.activity.R; import android. ...

  7. Date、String、Calendar、Timestamp类型之间的转化

    1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDa ...

  8. PostgreSQL的 initdb 源代码分析之三

    继续 其实接前面,整个while循环是这样的: ) { switch (c) { ...... } ...... } 这一句,c = getopt_long(argc, argv, "dD: ...

  9. 【转】Installing the libv8 Ruby gem on Centos 5.8

    转自:http://appsintheopen.com/posts/18-installing-the-libv8-ruby-gem-on-centos-5-8 First, Centos 5.8 s ...

  10. bat 简单命令实现编译cocos2d-x android项目

    新建一个compile_cmd.bat文件,存放需要执行的命令: cocos compile -p android -j 4 然后,如果直接运行这个文件,在编译完之后命令行窗口会自动退出,这样我们无法 ...