不可能使内部对象的方法对外部私有

发布于 2024-12-18 02:44:10 字数 888 浏览 0 评论 0原文

在下面的示例中,我无法隐藏update以防止公开曝光:

trait Order {
  sealed trait EntryOption {
    private[Order] def update(e: EntryOption): Unit
  }

  private case object EmptyEntry extends EntryOption {
    def update(e: EntryOption) = ()
  }

  trait Entry extends EntryOption

  def test(a: Entry, b: EntryOption): Unit = a.update(b)
}

它无法编译“错误:对象创建不可能,因为方法$line12$$read$Order$^类型为 (e: Order.this.EntryOption)Unit 的特征 EntryOption 中的日期未定义”——无论它应该是什么(编译器错误?)。我尝试了以下操作,但没有成功:

  • 还在 EmptyEntry private[Order] 中进行 update
  • 使其 protected – 这会破坏方法 test

目标是使 EntryOptionupdate 无法从外部 Order 访问。

编辑

如果我暂时将trait Order更改为object Order,它会编译,这表明存在潜在的编译器错误?

In the following example, I can't get to hide update from public exposure:

trait Order {
  sealed trait EntryOption {
    private[Order] def update(e: EntryOption): Unit
  }

  private case object EmptyEntry extends EntryOption {
    def update(e: EntryOption) = ()
  }

  trait Entry extends EntryOption

  def test(a: Entry, b: EntryOption): Unit = a.update(b)
}

It fails to compile with "error: object creation impossible, since method $line12$$read$Order$^date in trait EntryOption of type (e: Order.this.EntryOption)Unit is not defined" – whatever that is supposed to be (compiler bug?). I tried the following without success:

  • Also make update in EmptyEntry private[Order]
  • Make it protected – this breaks method test

The goal is to have EntryOption's update inaccessible from outside Order.

EDIT

If I tentatively change trait Order to object Order it compiles, indicating a potential compiler bug?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初见终念 2024-12-25 02:44:11

一个愚蠢的解决方法:

trait Order {
  sealed trait EntryOption {
    private[Order] def update(e: EntryOption): Unit
  }

  private sealed trait ScalaChokes extends EntryOption {
    private[Order] final def update(e: EntryOption) = ()
  }

  private case object EmptyEntry extends ScalaChokes

  trait Entry extends EntryOption
}

我应该提交错误吗?

A stupid work-around:

trait Order {
  sealed trait EntryOption {
    private[Order] def update(e: EntryOption): Unit
  }

  private sealed trait ScalaChokes extends EntryOption {
    private[Order] final def update(e: EntryOption) = ()
  }

  private case object EmptyEntry extends ScalaChokes

  trait Entry extends EntryOption
}

Should I file a bug?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文