2017-04-01 77 views
0

以下是我正在通過scala書的代碼片段。 Car類的其中一個參數是「def color:String」我們可以將方法作爲類定義中的參數嗎?

我不明白。 「def」是定義方法的關鍵字。這怎麼可以用在參數中?

scala> abstract class Car { 
| val year: Int 
| val automatic: Boolean = true 
| def color: String 
| } 
+0

。參數應該是無或val或var。什麼是「def」在參數 – Jason

+2

做什麼我沒有看到任何地方的任何參數,也沒有看到參數。你能澄清你的問題嗎? –

+0

哦,我認爲@Jason正在將類參數與類成員混合在一起! – pedrofurla

回答

0

這需要其他功能都被稱爲一個高階函數參數的函數,這裏就是一個很好的例子:

// A function that takes a list of Ints, and a function that takes an Int and returns a boolean. 
def filterList(list: List[Int], filter: (Int) => Boolean) = { /* implementation */ } 

// You might call it like this 
def filter(i: Int) = i > 0 
val list = List(-5, 0, 5, 10) 
filterList(list, filter) 

// Or shorthand like this 
val list = List(-5, 0, 5, 10) 
filterList(list, _ > 0) 

然而,是不是有什麼是你的榜樣發生。在你的例子中,Car類有三個類成員,其中兩個是變量,其中一個是函數。如果你要延長你的抽象類,你可以測試值超出:

abstract class Car { 
    val year: Int 
    val automatic: Boolean = true 
    def color: String 
} 

case class Sedan(year: Int) extends Car { 
    def color = "red" 
} 

val volkswagen = Sedan(2012) 
volkswagen.year  // 2012 
volkswagen.automatic // true 
volkswagen.color  // red 

這裏,具有顏色的功能(使用def)並沒有什麼太大的意義,因爲我的執行,顏色總是會是"red"

使用功能的一類成員將是該會改變一些值一個更好的例子:爲什麼是「高清」使用

class BrokenClock { 
    val currentTime = DateTime.now() 
} 

class Clock { 
    def currentTime = DateTime.now() 
} 

// This would always print the same time, because it is a value that was computed once when you create a new instance of BrokenClock 
val brokenClock = BrokenClock() 
brokenClock.currentTime // 2017-03-31 22:51:00 
brokenClock.currentTime // 2017-03-31 22:51:00 
brokenClock.currentTime // 2017-03-31 22:51:00 

// This will be a different value every time, because each time we are calling a function that is computing a new value for us 
val clock = Clock() 
clock.currentTime // 2017-03-31 22:51:00 
clock.currentTime // 2017-03-31 22:52:00 
clock.currentTime // 2017-03-31 22:53:00 
+0

非常感謝泰勒爲你詳細解釋。你是個好人 – Jason

相關問題