码迷,mamicode.com
首页 > 其他好文 > 详细

Scala第三章学习笔记

时间:2015-11-06 13:01:24      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

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

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

执行结果如下:

技术分享

 

Scala第三章学习笔记

标签:

原文地址:http://www.cnblogs.com/yangsy0915/p/4942023.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!