【问题标题】:Is there a way to make companion object function private and import the companion object to the class and then access the function?有没有办法将伴生对象函数设为私有并将伴生对象导入类然后访问该函数?
【发布时间】:2020-01-26 08:46:26
【问题描述】:

有人告诉我将伴生对象函数设为私有,并将伴生对象导入类,然后访问类中的函数。

以下代码在repl中不起作用。

示例:

object Foo {
  private def bar(i: Int): Boolean = i == 5
}

class Foo{
  import Foo._

  bar(0) 
}

object Foo {
  private def bar(i: Int): Boolean = i == 5
}

class Foo{
  import Foo._

  Foo.bar(0) 
}
scala> object Foo {
     |   private def bar(i: Int): Boolean = i == 5
     | }
defined object Foo

scala> 

scala> class Foo{
     |   import Foo._
     | 
     |   bar(0) 
     | }
<console>:15: error: not found: value bar
         bar(0)
         ^

scala> 

scala> object Foo {
     |   private def bar(i: Int): Boolean = i == 5
     | }
defined object Foo

scala> 

scala> class Foo{
     |   import Foo._
     | 
     |   Foo.bar(0) 
     | }
<console>:15: error: method bar in object Foo cannot be accessed in object Foo
         Foo.bar(0)
             ^

【问题讨论】:

  • 使用 :paste 作为下面提到的马里奥。要评估粘贴,您需要使用 cntl-d。请注意,需要 :paste 模式,因为有空行。如果没有空行,则似乎不需要 :paste 模式。
  • REPL 甚至会警告您它们实际上并不是同伴,因为它们是单独定义的。您可能没有收到警告,因为您收到了编译错误。

标签: scala


【解决方案1】:

根据docs

伴随对象及其类可以访问彼此的私有 成员

问题可能是在 REPL 中它没有将它识别为伴侣。尝试启用:paste 模式。

【讨论】:

    猜你喜欢
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2019-01-20
    • 2022-11-29
    • 2017-01-19
    相关资源
    最近更新 更多