换行后的左大括号造成的问题:

class FooHolder
{
def foo()
{
println("foo was called")
}
}

Scala认为def foo()这行代码定义了一个抽象方法。这是因为它没有捕捉到后面的大括号,认定def foo()是完整的一行语句。当编译时,它认为这是一个洗呢匿名代码块,应该在类构建过程中执行。

解决办法:加一条新的编码规定,要求所有的方法定义使用"="语法。

trait FooHolder2{
def foo() : Unit =
{
println("foo2 was called")
}
}

空悬的操作符和括号表达式

"大字符串聚合"是空悬操作符能够帮到编译器的例子,指你试图创建一个很大的、无法在一行里完整定义的字符串。

java例子:

class test{
private int x = 5;
private String foo() {
return "HAI"
+ x
+ "ZOMG"
+ "\n";
}
}

在Scala下就会编译失败,可以把操作符放到行末,从而知道后面还有更多内容

class test{
private int x = 5;
private String foo() {
return "HAI" +
x +
"ZOMG" +
"\n";
}
}

也可以增加括号

class test{
private int x = 5;
private String foo() {
return ("HAI"
+ x
+ "ZOMG"
+ "\n";)
}

Scala的特质是线性化的,所以如果想要使用覆盖的方法,可以在实例化对象的时候混入父类,而不需要定义新的类。

trait Animal {def talk : String}
trait Mammal extends Animal
trait Cat {def talk = "Meow"} val x = new Mammal with Cat x.talk

执行结果如下:

注解优化 @tailrec @switch注解

使用@switch注解

编译器给出了警告语句。因为模式匹配无法优化,编译不过。

@tailre 注解用于确保可以对方法执行尾递归优化,是把最后一句语句调用自身的函数转换为不占用栈控件,而是类似传统的while或for循环那样执行。JVM本身不支持,所以依赖于Scala编译器来执行优化。

要优化尾递归调用,Scala编译器需要以下条件。

(1)方法必须是final或私有。方法不能多态。

(2)方法必须注明返回类型。

(3)方法必须在其某个分支的最后一句调用自身。

广度优先搜索算法是搜索图或树的一种算法:先检查顶层元素,然后是这些元素的最近邻居,然后是最近邻居的最近邻居,据此类推,直到找到你想要的元素。

def search(start : Node, p : Node => Boolean) = {
@tailrec
def loop(nodeQueue : List[Node],visited : Set[Node]) : Option[Node] =
nodeQueue match{
case head :: tail if p(head) =>
some(head)
case head :: tail if !visited.contains(head) =>
loop(tail ++ head.edges, visited + head)
case head :: tail ==>
loop(tail,visited)
case head Nil =>
None
}
loop(List(start),Set())
}

Scala第三章学习笔记的更多相关文章

  1. 《Linux命令行与shell脚本编程大全》 第三章 学习笔记

    第三章:基本的bash shell命令 bash程序使用命令行参数来修改所启动shell的类型 参数 描述 -c string 从string中读取命令并处理他们 -r 启动限制性shell,限制用户 ...

  2. 《Linux内核设计与实现》第三章学习笔记

    第三章  进程管理 姓名:王玮怡  学号:20135116 一.进程 1.进程的含义 进程是处于执行期的程序以及相关资源的总称,程序本身并不是进程,实际上就是正在执行的代码的实时结果.Linux内核通 ...

  3. linux第三章学习笔记

    第三章 进程管理 进程是Unix操作系统抽象概念中最基本的一种. 进程管理是所有操作系统的心脏所在. 一.进程 1. 进程是处于执行期的程序.除了可执行程序代码,还包括打开的文件.挂起的信号.内核内部 ...

  4. 20135202闫佳歆--week6 课本第三章学习笔记

    第三章 进程管理 一.进程 1.进程 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程 执行线程, ...

  5. Day3 《机器学习》第三章学习笔记

    这一章也是本书基本理论的一章,我对这章后面有些公式看的比较模糊,这一会章涉及线性代数和概率论基础知识,讲了几种经典的线性模型,回归,分类(二分类和多分类)任务. 3.1 基本形式 给定由d个属性描述的 ...

  6. 《javascript高级程序设计》第三章学习笔记

    Undefined类型 该类型只有一个值,即undefined. 对未初始化的变量和未定义的变量,用typeof检测,都会返回'undefined' Null类型 该类型只有一个值,null.并且从逻 ...

  7. Mudo C++网络库第三章学习笔记

    多线程服务器的适用场合与常用编程模型 进程间通信与线程同步; 以最简单规范的方式开发功能正确.线程安全的多线程程序; 多线程服务器是指运行在linux操作系统上的独占式网络应用程序; 不考虑分布式存储 ...

  8. 《Linux内核设计与实现》 第三章学习笔记

    一.进程 1.进程就是处于执行期的程序(目标码存放在某种存储介质上).但进程并不仅仅局限于一段可执行程序代码,通常进程还要包含其他资源.执行线程,简称线程(thread),是在进程中活动的对象. 2. ...

  9. Scala第四章学习笔记(面向对象编程)

    延迟构造 DelayedInit特质是为编译器提供的标记性的特质.整个构造器被包装成一个函数并传递给delayedInit方法. trait DelayedInit { def deayedInit( ...

随机推荐

  1. JavaWeb学习记录(五)——Servlet随机产生验证码

    随机产生验证码的工具类: import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;impo ...

  2. 家族_NOI导刊2010普及(10)

    题目描述 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏.现在给你岛上的 ...

  3. 《jave程序设计》第一周学习总结

    <JAVA程序设计>第一周学习总结 教材学习内容总结 在第一周的学习中,我初次认识了JAVA程序的一些基础知识.我发现了很多问题 问题就是自己的代码编写出现了一点问题,符号和单词的大小写都 ...

  4. UVA11324 强连通+dp记忆化搜索

    题意:对于一个有向图,问最大团中有多少点,要求该点集内所有点对间至少有一条路径(u到v或v到u或两条都有). 首先,对于每一个强连通分量,其中的所有点必然能够互相到达,所以先进行缩点,然后对于缩点后的 ...

  5. 【BZOJ1007】【HNOI2008】水平可见直线

    依旧看黄学长代码,不过这回是看完后自己写的 原题: 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.例 ...

  6. 如何在python3.3用 map filter reduce

    在3.3里,如果直接使用map(), filter(), reduce(), 会出现 >>> def f(x): return x % 2 != 0 and x % 3 != 0  ...

  7. jQuery对下拉框Select操作总结

    jQuery对下拉框Select操作总结 转自网络,留做备用 jQuery获取Select元素,并选择的Text和Value: 1. $("#select_id").change( ...

  8. java .net compartion

    1, http://www-01.ibm.com/software/smb/na/J2EE_vs_NET_History_and_Comparison.pdf http://stackoverflow ...

  9. 检测php网站是否已经被攻破

    from :http://www.gregfreeman.org/2013/how-to-tell-if-your-php-site-has-been-compromised/ http://drop ...

  10. charles proxy

    charles proxy  一个比较好用的代理工具,可以进行数据的移动,以及pc 数据的抓包.