博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala第三章学习笔记
阅读量:4338 次
发布时间:2019-06-07

本文共 1872 字,大约阅读时间需要 6 分钟。

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

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 Animaltrait 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())}

 

转载于:https://www.cnblogs.com/yangsy0915/p/4942023.html

你可能感兴趣的文章
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_汇总
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_02 微服务核心基础讲解
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_04微服务下电商项目基础模块设计...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_3-06 服务注册和发现之Eureka Client搭建商品服务实战...
查看>>