Scala控制抽象】的更多相关文章

2019-04-14 关键字: Scala.Scala控制抽象.Scala高阶函数 本篇文章系笔者根据当前掌握的知识对 Scala 控制抽象的教材知识总结,不保证文章所述内容的绝对.完全正确性. 在 <快学Scala> 一书中,控制抽象被描述为是一系列语句的聚集,是一种特殊的函数,因为它是本质上只是对一系列语句的封装,所以它理应: 1. 没有参数输入: 2. 没有值返回. 教材中还给出了两段代码示例来解释控制抽象.但这两段代码对于 Scala 初学者来说,可能没那么好理解.这篇文章主要就针对教…
private def filesHere = (new java.io.File(".")).listFiles() def filesEnding(query: String) = for(file <- filesHere; if file.getName.endsWith(query)) yield file def filesContaining(query : String) = for(file <- filesHere; if file.getName.co…
减少代码重复 所有的函数都被分割成通用部分,它们在每次函数调用中都相同,以及非通用部分,在不同的函 数调用中可能会变化.通用部分是函数体,而非通用部分必须由参数提供.当你把函数值用做参数时,算法的非通用部分就是它代表的某些其它算法.在这种函数的每一次调用中,你都可以把不同的函数值作为参数传入,于是被调用函数将在每次选用参数的时候调用传入的函数值.这种高阶函数:higher-order function——带其它函数做参数的函数——给了你额外的机会去组织和简化代码. 高阶函数的一个好处是它们能让你…
1  参数(类型)推断 参数推断省去类型信息(在某些情况下[需要有应用场景],参数类型是可以推断出来的,如list=(1,2,3) list.map() map中函数参数类型是可以推断的),同时也可以进行相应的简写. 参数类型推断写法说明 1)参数类型是可以推断时,可以省略参数类型 2)当传入的函数,只有单个参数时,可以省去括号 3)如果变量只在=>右边只出现一次,可以用_来代替 应用案例 //分别说明 val list = List(1, 2, 3, 4) println(list.map((…
前言 在之前我们把抽象定义为一种过程,程序员可以通过它将一个名字与一段可能很复杂的程序片段关联起来.抽象最大的意义就在于,我们可以从功能和用途的角度来考虑它,而不是实现. 在大多数程序设计语言中,子程序是最主要的控制抽象的方法.大多数子程序都是参数化的,即通过传递一些参数来影响子程序的行为. 回顾栈的布局 当一个子程序被调用的时候,在栈的顶部将给它一个新的栈帧或称为活动记录.这个栈帧可能包含实际参数和/或返回值.簿记信息(包含返回地址和保存的寄存器).局部变量和/或各种临时量.当子程序返回时,栈…
本章主要讲解在Scala中如何使用函数值来自定义新的控制结构,并且介绍Curring和By-name参数的概念. 一.减少重复代码 1.重复代码的场景描述 前面定义的函数,将实现某功能的代码封装到一起形成一个特定功能的代码块.那么,正常情况下,各函数之间有可能会有部分逻辑是相同的.不好理解的话,看看下面的代码. object FileMatcher { private def filesHere = (new java.io.File(".")).listFiles def files…
def repeat(n:Int)(action: =>Unit)=for(i<-1 to n)action var i = 0 repeat(5){ println(i=i+1) } 另外一个例子: scala> def until(condition: =>Boolean)(action: =>Unit) { | if(!condition){ | action | until(condition)(action) | } | } until: (condition: =…
package com.test.scala.test /** * 抽象类学习,定义abstact关键字 */ abstract class AbstractClass { val id:Int;//抽象字段,没有带初始值 var age:Int var sex:String } class A(val id:Int) extends AbstractClass{ var age=23; var sex=" 男" } object Test{ def main(args: Array[…
直接上代码了哈. package com.test.scala.test object Kongzi { def main(args: Array[String]): Unit = { //if 语句,注意scala 没有switch case 语句 var x=1; val s=if(x>0) "hello" else 4; println(s); val m=if(x<0) 'c' else if(x==1) 1 else "i don't know!&quo…
6.3.4.     Scala中getClass 和 classOf Class A extends class B B b=new A    b.getClass ==classOf[A] B b=new B    b.getClass ==classOf[B] isInstanceOf 只能判断出对象是否为指定类以及其子类的对象,而不能精确的判断出,对象就是指定类的对象: 如果要求精确地判断出对象就是指定类的对象,那么就只能使用 getClass 和 classOf 了: p.getCla…