- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以澄清为什么以下代码会导致 MatchError 吗?在这种情况下,MatchError 意味着什么?
class A {
def g = A.f
}
object A {
val f = "Object A"
}
class B extends A {
override val A.f = "Object B"
}
val b = new B
b.g
鉴于这不起作用,有没有办法覆盖与此类似的伴随对象 val 或 def?
最佳答案
首先,解释为什么您会看到 MatchError
。对象上的值 (A.f) 被视为稳定标识符(如 Scala 引用所述,“稳定成员是由对象定义或非 volatile 类型的值定义引入的 [...] 成员”)。
这是打字机输出的样子:
object A extends scala.AnyRef {
...
private[this] val f: String = "Object A";
<stable> <accessor> def f: String = A.this.f
}
当在赋值中使用时,编译器会将此稳定标识符(稳定是必要条件)的赋值“脱糖”为模式匹配:
<synthetic> private[this] val x$1: Unit = ("Object B": String("Object B") @unchecked) match {
case A.f => ()
}
它无法将“对象 B”与模式“对象 A”进行匹配,因此会抛出 MatchError
。
对于更大的问题:您不能/不应该覆盖伴随对象上的值和方法。多态性适用于类及其实例,而不适用于静态方法或值。可能有一种更好的方法来考虑您的程序,该方法不涉及重写伴生对象上的 vals/defs。
关于oop - 重写伴随对象值和 Scala MatchError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306555/
我有两个伴随的仿函数,即它们成对出现如果一个是 doX() ,另一个将是 undoX()。 它们是这样声明的: template struct doSomething{
我想看看是否有任何工具或引擎可以将 Ecore(元)模型转换为合金规范? 如果它在考虑伴随的 OCL 表达式的情况下进行这种翻译,那就太好了 :) 谢谢 最佳答案 关于在 Alloy 和 UML 之间
所以我正在按照 ASP.NET 和 MVC 5 一书中的示例进行操作。这是导致错误的 View : @model SportsStore.WebUI.Models.ProductsListViewMo
我是一名优秀的程序员,十分优秀!