以下是我正在通過scala書的代碼片段。 Car類的其中一個參數是「def color:String」我們可以將方法作爲類定義中的參數嗎?
我不明白。 「def」是定義方法的關鍵字。這怎麼可以用在參數中?
scala> abstract class Car {
| val year: Int
| val automatic: Boolean = true
| def color: String
| }
以下是我正在通過scala書的代碼片段。 Car類的其中一個參數是「def color:String」我們可以將方法作爲類定義中的參數嗎?
我不明白。 「def」是定義方法的關鍵字。這怎麼可以用在參數中?
scala> abstract class Car {
| val year: Int
| val automatic: Boolean = true
| def color: String
| }
這需要其他功能都被稱爲一個高階函數參數的函數,這裏就是一個很好的例子:
// 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
非常感謝泰勒爲你詳細解釋。你是個好人 – Jason
。參數應該是無或val或var。什麼是「def」在參數 – Jason
做什麼我沒有看到任何地方的任何參數,也沒有看到參數。你能澄清你的問題嗎? –
哦,我認爲@Jason正在將類參數與類成員混合在一起! – pedrofurla