Scala第三章学习笔记

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

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

执行结果如下:

时间: 2024-11-10 07:35:40

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

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

第三章:基本的bash shell命令 bash程序使用命令行参数来修改所启动shell的类型 参数 描述 -c string 从string中读取命令并处理他们 -r 启动限制性shell,限制用户在默认目录下活动 -i 启动交互性shell,允许用户输入 -s 从标准输入读取命令 环境变量PS1.PS2 PS1:控制默认命令行提示符格式 PS2:控制后续命令行提示符格式   bash shell提示符字符串中使用的特殊字符 字符 描述 \a 报警字符 \d “日 月 年”格式显示的日期 \e

linux第三章学习笔记

第三章 进程管理 进程是Unix操作系统抽象概念中最基本的一种. 进程管理是所有操作系统的心脏所在. 一.进程 1. 进程是处于执行期的程序.除了可执行程序代码,还包括打开的文件.挂起的信号.内核内部数据.一个或者多个执行线程等多种资源 线程是在进程活动中的对象:内核调度的对象是线程而不是进程 在Linux系统中,并不区分线程和进程 可能存在两个或者多个进程执行的是同一个程序:甚至N个进程共享打开的文件.地址空间之类的资源 2. 线程:是进程中活动的对象.每个线程都有一个独立的程序计数器,进程栈

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

第三章  进程管理 姓名:王玮怡  学号:20135116 一.进程 1.进程的含义 进程是处于执行期的程序以及相关资源的总称,程序本身并不是进程,实际上就是正在执行的代码的实时结果.Linux内核通常把进程也叫“任务”. 2.线程的含义 执行线程简称线程,是在进程中互动的对象.内核调度的对象是线程而不是进程.Linux系统不区分线程和进程,线程只是一种特殊的进程. 3.进程的执行过程 (1)clone()调用fork(),通过复制一个现有进程来创建一个全新的进程,进程开始存活.其中调用fork

《Java从入门到精通》第三章学习笔记

第3章 Java语言基础 一.标识符和关键字 1.Java中的标识符用于标识类名.变量名.方法名.数组名.文件名. 2.标识符的命名规则:由字母.数字.下划线和美元符号组成,但第一个字符不能是数字.同时标识符不能选用Java的关键字和保留字. 3.一般的约定命名规则: (1)类和接口名:每个词首字母大写,如MyClass,HelloWorld: (2)方法名:第一个词的首字母小写,其余词首字母大写,尽量少用下划线,如myMethod,myGetData: (3)常量名:基本数据类型的常量名全部用

《程序员的自我修养》第三章学习笔记

1,  编译器编译源代码生成的文件叫做目标文件. 从结构上说,是编译后的可执行文件,只不过还没有经过链接 3.1 目标文件的格式 1,可执行文件的格式: Windows下的PE  和   Linux下的ELF 2,从广义上说,目标文件与可执行文件的格式几乎是一样的,所以广义上可以将目标文件与可执行文件看成是一种类型的文件. 3,可执行文件,动态链接库,静态链接库都按照可执行文件格式存储(Windows下是 PE-COFF格式,Linux下是ELF格式). 4,Linux下命令: $: file 

第三章学习笔记

一.进程 1.进程就是出于执行期的程序 2.执行线程,简称线程,是在进程中活动的对象 3.进程提供两种虚拟机制:虚拟处理器和虚拟内存 二.进程描述符和任务结构 1.内核把进程的列表存放在焦作任务队列的双向循环链表中,其中每一项都是类型为task_struct.称为进程描述符的结构 2.进程描述符的分配和存放: (1)目的:Linux通过slab分配task_struct结构,以达到对象复用以及和缓存着色的目的(避免资源动态分配和释放带来的资源消耗) (2)分配:每个任务的堆栈尾端(比如,对于向上

《从问题到程序》第三章学习笔记

知识总结 pan_area(3.24)是函数调用表达式,表示用实参3.24去调用函数pan_area.double pan_area(double r)表示本函数的名字是pan_area,其返回值类型是double.这个函数只有一个参数,所以参数表里只有一对类型描述和参数名,说明参数的类型是double,名字是r. int main() { ...... return 0; } 以main为名字的函数的地位特殊,它表示这个程序的执行起点和整个过程.在一个C程序启动时,其执行就从它的main函数的

《Linux内核设计与实现》第一、二章学习笔记

<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统 1.主要发展过程   1969年,贝尔实验室的程序员们设计了一个文件系统原型,最终发展演化成了Unix 1971年,Unix被移植到PDP-11型机中 1973年,整个Unix系统使用C语言进行重写,为后来Unix系统的广泛移植铺平了道路 Unix第六版(V6)被贝尔实

Android深度探索——第三章读书笔记及心得

了解Git ——第三章读书笔记及心得 对于Android的理解是从这学期才开始,所以不可谓说是了解的太少太少.对于Linux虽然经过了一学期的学习.经过一次紧张的实训,但是了解的也不是很多.不过我终究是知道Android和Linux是开源的,这是很多老师都曾经告诉我们的.虽然Git并不是学习Android和Linux开发必须掌握的技术,但是对于想要认真学习好这门技术的我们来说应该要努力掌握好这门技术.就像书上说的学习新技术的方式不是一味的读书,只会纸上谈兵.更应该深入的理解自己感兴趣的源代码,通