我想知道如果我理解Scala中的上下文界限,所以我寫了一個小的虛擬示例以查看隱式變量如何傳遞。我的代碼如下。Scala上下文界限語法錯誤
class Data(_x : Int) {
var x = _x
}
class DataOrdering extends Ordering[Data] {
def compare(d1 : Data, d2 : Data) : Int = d1.x - d2.x
}
def globalCompare[Data : Ordering](d1 : Data, d2 : Data) {
println("Global compare: " + implicitly[Ordering[Data]].compare(d1, d2))
}
def caller()(implicit d : Ordering[Data]) {
println("Caller")
globalCompare(new Data(5), new Data(100))
}
// Error method here
def caller2[Data : Ordering]() {
println("Caller2")
globalCompare(new Data(50), new Data(100))
}
def main() {
implicit val dataOrdering : DataOrdering = new DataOrdering
caller
caller2
}
main
呼叫者()方法的工作,我希望呼籲globalCompare,但caller2()給了我一個編譯錯誤
error: class type required but Data found
globalCompare(new Data(50), new Data(100))
^
error: class type required but Data found
globalCompare(new Data(50), new Data(100))
^
我預期調用者()和caller2()是等價的,但我似乎錯過了一些東西。有人可以向我解釋我做錯了什麼嗎?
爲什麼'case class Data(x:Int)'?爲什麼可變字段? – 2014-10-04 02:00:55
這是一個非常隨意的選擇,因爲它不是我在整體測試中關心的。 – azelo 2014-10-04 07:19:09
如果你不在意,你的頭腦應該默認爲'case class'。 – 2014-10-04 16:33:12