构造器

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

 /**
* 主构造器
* @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. Apache Spark MLlib的简介

    MLlib 是构建在 Spark 上的分布式机器学习库,充分利用了 Spark 的内存计算和适合迭代型计算的优势,将性能大幅度提升.同时由于 Spark 算子丰富的表现力, 让大规模机器学习的算法开发 ...

  2. Azure 公网及内网ip绑定方法

    此文章为我的云服务绑定情况,仅供参考,适用于已经创建vm,但开始未绑定vip,后期进行vip的绑定,注意:绑定ip会造成虚拟机暂时离线. -Location(vm所在地) 注意区分 北部和东部: Ch ...

  3. Linux上svn服务器的搭建

    安装svn服务器 直接用yum安装,命令如下: #yum install -y subversion 验证是否安装成功. #svnserve --version 创建SVN版本库 在home目录下创建 ...

  4. Mysql常见报错解决方法

    一:登录报错 ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: NO) mysql日志文件 ...

  5. [iOS基础控件 - 6.10.7] UIWindow

    A.UIWindow概念 1.继承UIView,是一种特殊的UIView 2.通常一个APP只有一个UIWindow 3.iOS程序启动后,创建的第一个视图就是UIWindow 4.没有UIWindo ...

  6. QString 与 QByteArray笔记

    程序中在于外设打交到是常常会用到读硬件显示到控件,或是读控件写到硬件的情况,操作的最多的是字节流,所以肯定会用到QString 和QByteArray,下面测试一些常用的转换: #include &l ...

  7. 高扩展的基于NIO的服务器架构(二)

    接上文高扩展的基于NIO的服务器架构 Reactor模式 如下图所示,将不同事件的检测分离开,当一种事件发生时一个事件处理器EventHandler将通知与该事件处理相对应的专用工作线程 采用这种架构 ...

  8. MVC神韵---你想在哪解脱!(十六)

    MVC验证属性自动验证原理 也许有人会问,既然我们没有在C与V追加任何显示错误信息提示的代码,那么控制器或视图内部是如何生成这些显示错误信息提示的画面的.让我们揭开这么谜底吧!当在Movie类中追加了 ...

  9. Oracle 的 INSERT ALL和INSERT FIRST

    描述性的东西就不来了,搞技术的,最喜欢实在的实例.通过下面的例子,大家很快就能明白insert all 与 insert first 的功能,比文字描述更通俗易懂. 一.INSERT ALL 不带条件 ...

  10. windows服务控制类

    /// <summary> /// 服务调用控制 /// </summary> public class WinServiceController { /// <summ ...