2016-08-17 18 views
1

在許多關於Scala隱式優先級的解釋中,它指出如果有多個具有相同優先級的事物,則應用Scala的「靜態重載規則」。什麼是Scala的靜態重載規則?

雖然這個規則沒有解釋。看來這個表達式在這種情況下是專門使用的。什麼是Scala的靜態重載規則?

+0

http://www.scala-lang.org/files/archive/spec/2.11/06-expressions.html#overloading-resolution – Alec

回答

4

這在§6.26.3 of the Scala Language Specification中有解釋。正如this answer還注意到,有一個blog post列出此分辨率以更簡單的方式:

在一個替代乙替代A的相對重量是從0到2的數,其定義爲總和的

  • 1,如果A是特異性的,因爲B,否則爲0,和
  • 1如果A類或對象是從派生的類或對象定義B,否則爲0被定義。

一個類或對象C從一個類或對象d衍生如果下列之一成立:

  • C是d的一個子類,或
  • C是一個同伴對象從D派生的類,或
  • D是派生C的類的伴隨對象。

一種替代A比替代乙更具體的,如果A對B的相對重量比B的相對重量比越大A.

對於視圖,如果A爲特定視圖作爲B,A相對於B獲得1的相對權重。

如果A在定義了B的派生類中定義,則A獲得另一個相對權重。