问题标签 [companion-object]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
370 浏览

scala - 未从伴随对象调用覆盖 toString 方法

我认为一旦通过伴生对象创建了该类的对象,我就可以调用该类的方法。但我无法做到这一点。下面是我的代码:

朋友们,你能帮我理解它为什么会这样吗?谢谢。

0 投票
1 回答
1826 浏览

scala - 在 Scala 中,如何从其伴随对象访问案例类的私有构造函数

我定义了以下代码(在带有 Scala 2.10 的 Scala IDE/Scala 工作表中):

我成功收到以下输出:

a : public_domain.WorkSheet1.A = A(哦,海)

但是,当我注释掉现有的case class A (s: String)并取消注释另一个(包含“私有”)时,我收到以下编译器错误:“无法在对象 WorkSheet1 中访问类 A 中的构造函数 A”。

据我了解,伴生对象可以访问其伴生类的所有私有部分。呵呵。呃……不过,说真的。是什么赋予了?

0 投票
1 回答
1484 浏览

scala - 处理宏注释时无法访问父级成员

我有点受阻于以下(宏注释)情况。假设我有一个名为的注解@factory,旨在为apply相应伴随对象中的注解特征生成一个方法。例如,给定trait A

预期生成的代码如下:

现在假设我们有一个B继承自的特征A

应该生成:

在后一种情况下,我需要知道存在于哪些属性A但我不知道如何获取有关它们的任何信息。在处理宏注释时,我只能访问B特征 AST(作为 a ClassDef)。尽管它template包含对父级的引用(as TypeTrees),但两个字段tpesymbol都是空的。

能够访问AAST 对我来说很棒。但是,我认为这是不可行的。因此,任何符号或类型(指向父类型或当前类型)都足够好。

如果您想查看更多实现细节,我已将项目上传到https://github.com/jesuslopez-gonzalez/cool-factory。它可以生成apply局部值。

0 投票
2 回答
2198 浏览

scala - 智能构造函数的Scala案例类实现?

尝试使用案例类实现智能构造函数。copy设法很好地覆盖了该方法,并且我认为apply伴随对象中的 应该可以解决问题,但是在尝试传入BigInt. 我尝试输入,def apply(value: BigInt): Option[Natural]但随后scalac抱怨符号冲突。

也许这样的事情是不可能的?

0 投票
2 回答
7134 浏览

scala - 无法访问伴随对象的字段

我想知道,为什么一个类不能访问伴随对象的字段?

它应该,它甚至应该可以访问object MyClass.

0 投票
2 回答
5723 浏览

scala - Scala伴随对象中的“静态”字段

我可以在不参考类的实际对象的情况下检查伴随对象中字段的值吗?

我想存储一个静态计数器,每次创建该类的新对象时增加它,并且能够在不使用对象本身的情况下检查它的值,这可能吗?

0 投票
1 回答
2158 浏览

scala - 使用类上的宏注释创建或扩展伴随对象

使用 Scala 2.10/2.11 宏天堂注解宏,如何添加或扩展注解类的伴生对象?骨骼:

这样,给定

以下输入

将扩展为:


这是第一次天真的尝试,def hasFoo = 33现在只是添加:

这在伴随对象已经存在时有效:

但不是在创建时:

所以我仍然需要弄清楚如何提供模块构造函数......

0 投票
1 回答
204 浏览

xml - Scala – 伴随对象和应用:不可理解的错误

我无法使用伴随对象创建表示 XML 解析文档的类。

这是该类的代码:

这是使用此类的应用程序的代码:

错误是:

我根本不明白这个错误(以及如何删除它)。

谢谢!

0 投票
2 回答
294 浏览

scala - scala:私有实用程序方法是否应该存在于伴随对象中?

这个问题是不言自明的,但请允许我提供一个例子:

我有以下内容:

在这种情况下,问题是:应该def message(result: Result)住在object Foo?

赞成的论点是明确表示def message(result: Result)不依赖于class Foo. 反对的论点是伴随对象的动机是提供一个放置java公共静态方法的地方。

0 投票
1 回答
209 浏览

scala - 合并自定义和编译器为案例类生成的伴随对象。合并规则是什么?

我刚刚在下面尝试了这段代码,它按预期工作。它打印1

现在,我的问题是我不明白引擎盖下发生了什么。

案例类如何有两个伴随对象(一个由编译器生成,一个由我编写)?可能它不能。所以它们必须在引擎盖下以某种方式合并。我只是不明白它们是如何合并的?是否有任何我应该注意的特殊合并规则?

是不是这样,如果两个伴随对象中定义的定义集是不相交的,那么结果案例类中的定义集只是两个不相交集的并集?我认为这就是它们的合并方式,但我不确定。有人可以确认这个合并规则是否是在 Scala 编译器中实现的吗?还是有额外的东西?

更具体地说,编译器生成的伴随对象和我的伴随对象合并的规则是什么?这些规则是否在某处指定?

我还没有真正看到在我读过的几本 Scala 书籍中讨论过这个主题——也许太肤浅了——阅读。