Scala学习(二)——高级特性】的更多相关文章

===================== Scala语言的高级特性 ========================一.Scala的集合 1.可变集合mutable 不可变集合immutable //不可变集合 val math = scala.collection.immutable.Map("Alice"->80,"Bob"->90) //可变集合 val chinese = scala.collection.mutable.Map("A…
控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句)看做两样不同的东西.表达式有值,而语句执行动作.在Scala中,几乎所有构造出来的语法结构都有值.这个特性使得程序更加精简,也更易读.本篇的要点包括: 1. 表达式有值 2. 块也有值,是它最后一个表达式的值 3. Scala的for循环就像是"增强版"的Java for循环 4. 分号…
一.if表达式有值 val s=if(x>0) 1 else -1,相当于Java中x>0?1:-1(不过不拿呢个在?:中插入语句),而且Scala中可以用混合类型(如if (x>0) "Hello" else -1). 注:像 if(x>0) 1这样if语句可能没有输出值,但是在Scala中每个表达式都有值(此时是引入了一个Unit类,写做()[表示“无有用值”的占位符]. REPL中想换行用{},想粘贴输入paste进入粘贴模式,然后Ctrl+D退出. 二.…
前几天写了一篇关于php面向对象基础知识的博客,这两天看了php面向对象的高级特性,写出来记录一下吧,方便以后拿出来复习. 面向对象除了最基本的定义类之外,最主要就是因为面向的一些高级特性,运用这些高级特性,我们可以写出更加合理优雅的代码(ps:上述官方语言都是在网上摘抄,由于没有多少面向对象编程的经验,自己仅仅是记录自己的学习心得).闲话扯完,接下来说说面向对象. (1)静态方法和属性: 在面向对象的基础中,我们对类中属性的访问几乎都是首先进行类的实例化,得到实例化后的对象,通过对象进行访问.…
scala函数高级操作 一.字符串高级操作 多行字符串和插值 package top.ruandb.scala.Course06 object StringApp { def main(args: Array[String]): Unit = { val str = """ |这是一个多行字符串 |hello |lucy |lallalla """.stripMargin val say ="hello" val name =…
一.本章要点 延续让你可以回到程序执行当中之前的某个点; 可以在shift块中捕获延续 延续函数一直延展到包含它的reset块的尾部 延续所谓的”余下的运算“,从包含shift的表达式开始,到包含它的reset块的尾部结束,其中shift替换成一个”洞“ 当你传入一个参数来调用延续时,这个”洞“将传入的参数值填上 包含shift表达式的代码将被以”延续传递风格“(CPS)重写,直到包含该延续的reset为止 包含shift但没有reset的方法必须加上CPS注解 延续可以用来将对某个树形结构的递…
一.本章要点 隐式转换用于类型之间的转换 必须引入隐式转换,并确保它们可以以单个标识符的形式出现在当前作用域 隐式参数列表会要求指定类型的对象.它们可以从当前作用域中以单个标识符定义的隐式对象的获取,或者从目标类型的伴生对象获取; 如果隐式参数是一个单参数的函数,那么它同时也会被作为隐式转换使用 类型参数的上下文界定要求存在一个指定类型的隐式对象 如果有可能定位到一个隐式对象,这一点可以作为证据证明某个类型转换是合法的 二.隐式转换 隐式转换函数指以implicit关键字声明的带有单个参数的函数…
一.本章要点 每个actor都要扩展Actor类并提供act方法 要往actor发送消息,可以用actor!message 消息发送是异步的:”发完就忘“ 要接受消息,actor可以调用receive或react,通常是在循环中这样做 receive/react的参数是有case语句组成的代码块(偏函数) 不同actor之间不应该共享状态.总是使用消息来发送数据 不要直接调用actor的方法,通过消息进行通信 避免同步消息——将发送消息和等待响应分开 不同actor可以通过react而不是rec…
Scala控制结构和函数&练习 1. 一个数字如果为正数,则它的signum为1:如果是负数,则signum为-1:如果为0,则signum为0:编写一个函数来计算这个值 简单逻辑判断: 测试结果如下: Scala中已经有此方法了,如下: println(BigInt(10).signum) 测试结果如下: 2. 一个空的快表达式{}的值是什么,类型是什么 在REPL中测试如下: 由此可以看出,它的值是()类型是Unit 3. 在Scala中何种情况下赋值语句x=y=1是合法的.(提示:给x找个…
切片 在Python基础篇里,我们知道Python的可序列对象可以通过索引号(下标)来引用对象元素,索引号可以由0开始从左向右依次获取,可以从-1开始由右向左获取.这种方法可以帮助我们依次获取我们想要的元素.而切片可以帮助我们获取被切片元素的副本. 可序列对象切片时所需要的参数[start_index:stop_index:step] start_index:切片的起始位置 stop_index:切片的结束为止(不包括) step:步长,可选参数.默认值是1,但不能为0.表示依次递增. 假设te…