簡體   English   中英

Scala Context Bounds語法錯誤

[英]Scala Context Bounds syntax error

我試圖查看我是否了解Scala中的Context Bounds,所以我寫了一個虛擬的示例來了解隱式變量如何傳遞。 我的代碼如下。

  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

caller()方法在調用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))
                                  ^

我期望caller()和caller2()是等效的,但是我似乎缺少了一些東西。 有人可以向我解釋我在做什么錯嗎?

在caller2中, Data是類型參數,而不是類名稱。

這可能在某個地方被騙了。

就像這里 ,@ TravisBrown稱其為極端 煩人

我不知道在遮蓋具體類型名稱時是否更令人討厭。 我不知道Xlint是否會Xlint警告您。 應該有人的輕信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM