Scala学习十八——高级类型】的更多相关文章

一.本章要点 单例类型可用于方法串接和带对象参数的方法 类型投影对所有外部类的对象都包含了其他内部类的实例 类型别名给类型指定一个短小的名称 结构类型等效于”鸭子类型“ 存在类型为泛型的通配参数提供了统一形式 使用自身类型来表明某特质对混入它的类或对象的类型要求 ”蛋糕模式“用自身类型来实现依赖注入 抽象类型必须在子类中具体化 高等类型带有本身参数化类型的类型参数 二.单例类型 给定任何引用v,可以得到类型.type,可能的两个值:v和null.例: //通过this返回自身串接 class D…
一.本章要点 match表达式是更好的switch,不会有意外调入下一个分支 如果没有模式能够匹配,会抛出MatchError,可以用case _模式避免 模式可以包含一个随意定义的条件,称做守卫 你可以对表达式的类型进行匹配;优先选择模式匹配而不是isInstanceOf/asInstanceOf 你可以匹配数组,元祖,样例类的模式,然后匹配到不同部分绑定到变量 在for表达式中,不能呢匹配的情况会被安静的跳过 样例类是编译器会为之自动 二.更好的switch var sign=... val…
一.本章要点 类可以实现任意数量的特质 特质可以要求实现它们的类具备特定的字段,方法或超类 和Java接口不同,Scala特质可以提供方法和字段实现 当你将多个特质叠加在一起时,顺序很重要——其方法先被执行的特质排在更后面 二.为什么没有多重继承 Scala和Java一样,不允许使用多重继承(如果继承的多个超类具备某些共通的方法或字段,会引起混乱,还有可能引起菱形继承问题); Java中可以实现任意多个接口(接口中只能有抽象方法,且不能有字段,Java中使用抽象基类和接口的做法让可以实现一些方法…
1.小试牛刀 使用Scala自带的REPL shell(Read Evaluate Print Loop)学习和尝试Scala语言库,创建的变量在会话期间都是有效的. Ctrl+D可退出REPL shell 实验1: scala> println("hello world")hello world scala> 5*7res1: Int = 35 scala> 2* res1res2: Int = 70 2.处理数据中的字面量.值.变量和类型 字面量:直接在源代码中出…
一.本章要点 可以为类.方法.字段.局部变量.参数.表达式.类型参数以及各种类型定义添加注解 对于表达式和类型,注解跟在被注解的条目之后 注解的形式有@Annotation.@Annotation(value)或@Annotation(name1=value1,...) @volatile.@transient.@strictfp.@native分别生成等效的Java修饰符 用@tailrec注解让你校验某个递归函数使用了尾递归化 assert函数利用了@elidable注解,可以从Scala程…
参考:生成器 Note 1.通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的,且容易造成空间浪费.所以,如果列表元素可以按照某种算法推算出来,那我们可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间,在Python中这种机制称为生成器:generator. 注意:generator保存的是算法. 第一种生成generator的方法很简单,将列表生成式的[]括号改为()即可: #!/usr/bin/env python3 L…
一.本章要点 文法定义中的二选一.拼接.选项和重复在Scala组合子解析器中对应|.~.opt和rep 对于RegexParsers而言,字符串字面量和正则表达式匹配的是词法单元 用^^来处理解析结果 在提供给^^的函数中使用模式匹配来将-结果拆开 用~>或<~来丢弃那些在匹配后不再需要的词法单元 repsep组合子处理那些常见的用分割符分割开的条目 基于词法单元的解析器对于解析器那种带有保留字和操作符的语言很有用.准备好定义你自己的词法分析器 解析器是消费读取器并产出解析结果:成功.失败或错…
一.本章要点 XML字面量<like>this</like>的类型为NodeSeq 可以在XML字面量中内嵌Scala代码 Node的child属性产出后代节点 Node的attributes属性产出包含节点属性的MetaData对象 \和\\操作符执行类Xpath匹配 可以在case语句中使用XML字面量匹配节点模式 使用带有RewriteRule示例的RuleTransformer来变换某个节点的后代 XML对象利用Java的XML相关方法实现XML文件的加载和保存 Const…
一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数应用到集合中的值; 有许多语法上的简写让你以简短且易读的方式表达函数参数; 可以创建操作代码块的函数,像是内建的控制语句 二.作为值的函数 在Scala中,函数是头等公民,和数字一样,在变量中存放函数: import scala.math._ val num=3.14 val fun=ceil _…
除了Basic Operators中描述的运算符之外,Swift还提供了几个执行更复杂值操作的高级运算符.这些包括C和Objective-C中您熟悉的所有按位和位移运算符. 与C中的算术运算符不同,Swift中的算术运算符默认不会溢出.溢出行为被捕获并报告为错误.要选择溢出行为,请使用Swift默认溢出的第二组算术运算符,例如溢出加法运算符(&+).所有这些溢出运算符都以&符号开头&. 定义自己的结构,类和枚举时,为这些自定义类型提供自己的标准Swift运算符实现会很有用.Swif…