问题标签 [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.
scala - 未从伴随对象调用覆盖 toString 方法
我认为一旦通过伴生对象创建了该类的对象,我就可以调用该类的方法。但我无法做到这一点。下面是我的代码:
朋友们,你能帮我理解它为什么会这样吗?谢谢。
scala - 在 Scala 中,如何从其伴随对象访问案例类的私有构造函数
我定义了以下代码(在带有 Scala 2.10 的 Scala IDE/Scala 工作表中):
我成功收到以下输出:
a : public_domain.WorkSheet1.A = A(哦,海)
但是,当我注释掉现有的case class A (s: String)
并取消注释另一个(包含“私有”)时,我收到以下编译器错误:“无法在对象 WorkSheet1 中访问类 A 中的构造函数 A”。
据我了解,伴生对象可以访问其伴生类的所有私有部分。呵呵。呃……不过,说真的。是什么赋予了?
scala - 处理宏注释时无法访问父级成员
我有点受阻于以下(宏注释)情况。假设我有一个名为的注解@factory
,旨在为apply
相应伴随对象中的注解特征生成一个方法。例如,给定trait A
:
预期生成的代码如下:
现在假设我们有一个B
继承自的特征A
:
应该生成:
在后一种情况下,我需要知道存在于哪些属性A
,但我不知道如何获取有关它们的任何信息。在处理宏注释时,我只能访问B
特征 AST(作为 a ClassDef
)。尽管它template
包含对父级的引用(as TypeTrees
),但两个字段tpe
和symbol
都是空的。
能够访问A
AST 对我来说很棒。但是,我认为这是不可行的。因此,任何符号或类型(指向父类型或当前类型)都足够好。
如果您想查看更多实现细节,我已将项目上传到https://github.com/jesuslopez-gonzalez/cool-factory。它可以生成apply
局部值。
scala - 智能构造函数的Scala案例类实现?
尝试使用案例类实现智能构造函数。copy
设法很好地覆盖了该方法,并且我认为apply
伴随对象中的 应该可以解决问题,但是在尝试传入BigInt
. 我尝试输入,def apply(value: BigInt): Option[Natural]
但随后scalac
抱怨符号冲突。
也许这样的事情是不可能的?
scala - 无法访问伴随对象的字段
我想知道,为什么一个类不能访问伴随对象的字段?
它应该,它甚至应该可以访问object MyClass
.
scala - Scala伴随对象中的“静态”字段
我可以在不参考类的实际对象的情况下检查伴随对象中字段的值吗?
我想存储一个静态计数器,每次创建该类的新对象时增加它,并且能够在不使用对象本身的情况下检查它的值,这可能吗?
scala - 使用类上的宏注释创建或扩展伴随对象
使用 Scala 2.10/2.11 宏天堂注解宏,如何添加或扩展注解类的伴生对象?骨骼:
这样,给定
以下输入
将扩展为:
这是第一次天真的尝试,def hasFoo = 33
现在只是添加:
这在伴随对象已经存在时有效:
但不是在创建时:
所以我仍然需要弄清楚如何提供模块构造函数......
xml - Scala – 伴随对象和应用:不可理解的错误
我无法使用伴随对象创建表示 XML 解析文档的类。
这是该类的代码:
这是使用此类的应用程序的代码:
错误是:
我根本不明白这个错误(以及如何删除它)。
谢谢!
scala - scala:私有实用程序方法是否应该存在于伴随对象中?
这个问题是不言自明的,但请允许我提供一个例子:
我有以下内容:
在这种情况下,问题是:应该def message(result: Result)
住在object Foo
?
赞成的论点是明确表示def message(result: Result)
不依赖于class Foo
. 反对的论点是伴随对象的动机是提供一个放置java公共静态方法的地方。
scala - 合并自定义和编译器为案例类生成的伴随对象。合并规则是什么?
我刚刚在下面尝试了这段代码,它按预期工作。它打印1
。
现在,我的问题是我不明白引擎盖下发生了什么。
案例类如何有两个伴随对象(一个由编译器生成,一个由我编写)?可能它不能。所以它们必须在引擎盖下以某种方式合并。我只是不明白它们是如何合并的?是否有任何我应该注意的特殊合并规则?
是不是这样,如果两个伴随对象中定义的定义集是不相交的,那么结果案例类中的定义集只是两个不相交集的并集?我认为这就是它们的合并方式,但我不确定。有人可以确认这个合并规则是否是在 Scala 编译器中实现的吗?还是有额外的东西?
更具体地说,编译器生成的伴随对象和我的伴随对象合并的规则是什么?这些规则是否在某处指定?
我还没有真正看到在我读过的几本 Scala 书籍中讨论过这个主题——也许太肤浅了——阅读。