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

本文共 1818 字,大约阅读时间需要 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())}

 

转载地址:http://zzweo.baihongyu.com/

你可能感兴趣的文章
Faster R-CNN CPU环境搭建
查看>>
IOS在线安装App
查看>>
base 镜像 - 每天5分钟玩转容器技术(10)
查看>>
六、编写第一个应用【外部nodejs调用】
查看>>
利用DNSlog回显Weblogic(CVE-2017-10271) 漏洞执行命令结果
查看>>
第16件事 愿景和目标要接地气
查看>>
细嚼慢咽 Mongoose 5
查看>>
Direct3D 11 Tutorial 7:Texture Mapping and Constant Buffers_Direct3D 11 教程7:纹理映射和常量缓冲区...
查看>>
Objective C内存管理进阶(一):实践准则
查看>>
TrackPoint_configure_ThinkPad_squeeze(06-16.2011)
查看>>
CSDN博客频道“移动开发之我见”主题征文活动
查看>>
PHPExcel常用方法汇总
查看>>
用户登陆的业务流程架构设计
查看>>
创建表的备份和删除
查看>>
HTML data属性
查看>>
Java 第一个程序 HelloWorld!
查看>>
weblogic.cluster.MulticastMonitor, monitoring multicast traffic in a Weblogic Cluster
查看>>
android 通过修改图片像素实现CircleImageView
查看>>
私服 Nexus 的配置
查看>>
Linux System and Performance Monitoring(Network篇)
查看>>