2013-04-17 34 views
4

我使用从Scala的采取了一些Scala代码courers上coursera:Scala的布尔:代码段

package src.functional.week4 

abstract class Boolean { 

    def ifThenElse[T](t: => T, e: => T): T 

    def && (x: => Boolean): Boolean = ifThenElse(x, false) 

} 

线def && (x: => Boolean): Boolean = ifThenElse(x, false)给出了这样的编译时间错误:

类型不匹配;发现:scala.Boolean(假)要求: src.functional.week4.Boolean

这里是从视频的代码片段:

enter image description here

我是否需要更改代码为了编译它?

当我创建使用

object false extends Boolean { 
     def ifThenElse[T](t: => T, e: => t) = e 
    } 

新的“假”的对象,收到了错误:

多个标记在该行 - 标识符预期,但“假”找到。

我正在定义与'abstract class Boolean'类相同的类中的对象。我无法创建类型为'false'的新对象,因为Eclipse IDE不允许这样做。

回答

5

您的代码(和Martin's)定义了一个新的Boolean,即使它是在Scala中预定义/内置的。

您遇到的问题是,你还没有定义一个新的false以凌驾内置false和内置false不兼容你重新定义Boolean

+0

是的,我应该在发布问题之前观看了讲座的其余部分。谢谢。我现在宣布了一个新的'虚假'对象,但我得到一个新的错误。我不应该能够创建一个'false'类型的新对象,因为'false'是保留的?我更新了我的问题 –

+2

Scala有重新定义保留符号的注释(主要是为了允许与没有相同保留字集合的Java进行互操作)。为了(重新)定义一个保留的符号,把它包含在反标记中(当定义_and_时引用它......有点乏味,我知道)。 –

4

演讲中的代码未编译,因为truefalse是保留字,不能重新定义。改为使用TrueFalse

+0

也有可能这个讲座很容易解释这个事实,即你还需要为'Boolean'定义这两个子类(作为对象)...... True'将定义ifThenElse将't'和'False'返回给返回'e'。 –