3-scala高级】的更多相关文章

Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一个人添加是不现实的,因此很多很多时候需要我们自己动手.掌握implicit的用法是阅读Spark源码的基础,也是学习Scala其它的开源框架的关键,implicit可分为隐式参数,隐式转换类型以及隐式类三种类型. 一.Scala中的隐士参数 /* @author :yinzhengjie Blog:…
Scala高级特性 1.    课程目标 1.1.   目标一:深入理解高阶函数 1.2.   目标二:深入理解隐式转换 2.    高阶函数 2.1.   概念 Scala混合了面向对象和函数式的特性,我们通常将可以作为参数传递到方法中的表达式叫做函数.在函数式编程语言中,函数是“头等公民”,高阶函数包含:作为值的函数.匿名函数.闭包.柯里化等等. 2.2.   作为值的函数 可以像任何其他数据类型一样被传递和操作的函数,每当你想要给算法传入具体动作时这个特性就会变得非常有用. 定义函数时格式…
一.函数式编程 Scala中的函数可以独立存在, 不需要依赖任 何类和对象 def  放在类中就是方法:放在外边就是函数 1.将函数赋值给变量 Scala中的函数是一等公民, 可以独立定义, 独立存在, 而且可以直接将函数作为  值赋值给变量            Scala的语法规定, 将函数赋值给变量时, 必须在函数后面加上空格和下划线 def sayHello(name: String) { println("Hello, " + name) } val sayHelloFunc…
今天我们来介绍scala的高级特性,上次已经介绍过他的一个特性:高阶函数,这次是隐式转换 1.隐式转换的例子 read的例子 解析:发现这个file没有read的方法,然后就开始在开始在这个上下文里面找看有么有隐式的, 匹配的,如果有,就可以转换,这个里面的匹配是类型的匹配,发现file匹配richfile的匹配 2.匹配符号; -:逆变:作为偏函数的输入 +:斜变:作为偏函数的输出 则源码为: trait PartialFunction[-A,+B] extends (A => B), 用的不…
一. Implicit关键字 隐士转换 (1)隐士转换函数:用implicit修饰的,只有一个参数的函数.他会被自动执行,来把一个值转换成另一个 class RichFile(val f:File){ def read = Source.fromFile(f).mkString } implicit def file2richFile(f:File) = new RichFile(f) //隐士转换函数 val result: String = new File("/home/lj/chrome…
一. 操作符 自定义操作符 操作付默认左结合调用.除了以:结尾的操作符是右结合调用 object OperaterTest extends App{ val a: myInt = new myInt(1) val b: myInt = new myInt(2) val c: myInt = new myInt(3) println(a +++ b) println((c---:b---:a).value) //:结尾的操作符右结合,相当于(a.---:(b)).---:(c) = 1-2-3 }…
协变 案例一: class Animal {} class Bird extends Animal {} class Animal {} class Bird extends Animal {} //协变 class Covariant[T](t:T){} val cov = new Covariant[Bird](new Bird) val cov2:Covariant[Animal] = cov c不能赋值给c2,因为Covariant定义成不变类型. 稍微改一下: class Animal…
岗位级别:T3 岗位职责: 1.参与自动调价.匹配系统的设计和实现 岗位要求: 1. 一年以上scala开发经验2.良好的函数式编程能力3. JAVA基础扎实4.熟悉大数据处理,有hadoop/hbase使用经验5.良好的算法及数据结构知识6.善于学习,为人正直.诚信 感兴趣的同学可以联系我,我帮忙推荐…
一.隐式 implicit分类: (1)隐式参数 (2)隐式转换类型 (3)隐式类 特点:让代码变得更加灵活 (一)隐式参数 1.ImplicitTest object ImplicitTest { //此参数 def sleep(how:String):Unit = {println(how)} //此参数如果被implicit修饰的话,调用可以不写参数 直接sleep2 def sleep2(implicit how:String = "香啊") = {println(how)}…
目标一:深入理解高阶函数 高阶函数 1.1概念 Scala混合了面向对象和函数式的特性, 我们通常将可以做为参数传递到方法中的表达式叫做函数. 在函数式编程语言中,函数是“头等公民”, 高阶函数包含:作为值的函数.匿名函数.闭包.柯里化等等. 1.2作为值的函数(故名思议:函数的值作为返回值) 1.3匿名函数 在scala中,你不需要给每一个函数命名,没有将函数赋给变量的函数叫做匿名函数 由于scala可以自动推断出参数的类型,所以可以写的精简一些 还记的神奇的下划线吗?这才是终结方式 1.4将…