在关于Scala隐含优先级的许多解释中,它指出如果有多个具有相同优先级的东西,则应用Scala的“静态重载规则”。
但是没有解释这条规则。似乎此表达式仅在此上下文中使用。什么是Scala的静态重载规则?
答案 0 :(得分:4)
§6.26.3 of the Scala Language Specification中对此进行了解释。正如this answer中所述,有一个blog post以更简单的方式列出了此解决方案:
备选方案A相对于备选方案B的相对权重是0到2之间的数字,定义为
的总和
- 1如果A与B一样具体,否则为0,
- 1如果在类或对象中定义A,则从定义B的类或对象派生,否则为0。
如果其中一个成立,则类或对象C派生自类或对象D:
- C是D的子类,或
- C是从D或
派生的类的伴随对象- D是派生C的类的伴随对象。
如果A对B的相对权重大于B对A的相对权重,则备选A比备选B更具特异性。
对于视图,如果A与B的特定视图相同,则A的相对权重为B。
如果A在定义了B的派生类中定义,则A得到另一个相对权重。