2013-04-17 48 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'。 –