问题标签 [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 回答
3416 浏览

scala - 为什么我们必须从伴随对象显式导入具有隐式参数的隐式转换?奇怪的。

让我们考虑这段代码:

它运行并打印:

现在,如果我们注释掉这一行

然后我们得到一个编译错误:

在此处输入图像描述

注释掉该行后,为什么 Scala 无法找到A.A2String是否可以找到A.A2Int

如何解决这个问题?

谢谢阅读。

0 投票
1 回答
260 浏览

scala - 使用工厂方法扩展带有伴随对象的类时如何“扩展”工厂方法

假设您有一个类 Foo,它是对某种文本文件的抽象,以及一个带有简化 Foo 创建的工厂方法的伴随对象:

当你想扩展FooasBar和时会发生什么Baz,如果两个子类都需要有相同的工厂方法?您不想将伴生对象复制Foo为伴生对象Bar和伴生对象Baz,那么使工厂方法“通用”的正确方法是什么?

0 投票
1 回答
4463 浏览

scala - Companion 类需要导入 Companion 对象方法和嵌套对象?

我正在查看与 Akka 相关的类型安全激活器代码,以下构造引起了我的兴趣:

伴侣对象:

伴生类:它导入伴生对象方法:

所以..这有点令人惊讶。为什么伴随类/对象之间没有“特殊关系”允许类自动“看到”对象方法?

更新 我对此有点怀疑,所以继续注释掉“import MarkerActor._”这导致 Companion Class 中出现“Symbol not found: Stop”错误。所以..确实需要导入。

0 投票
2 回答
227 浏览

scala - Scala 等价于使用伴随对象的静态 final

我怎样才能将以下内容转换为 scala.

我已经看到答案确实创建了一个类和一个伴随对象,但是有人可以向我解释我应该如何以及为什么要这样做吗?

我是否应该在伴随对象中创建我想要作为静态变量公开的内容,以及加载用于在类中初始化 jedisPool 的配置文件?

我可以选择在伴生对象中将 jedisPool 设为公开还是私有?

另外(不影响对我的问题的回答,但作为一个额外的好处),我在某处读过但没有完全理解这使得模式使测试变得困难,那么有解决方法吗?

0 投票
1 回答
1241 浏览

scala - 动态加载 Scala 对象

我有许多操作数据库的对象(不是类),我想制作一个更小的帮助类,这样我就可以做类似的事情java my.helper.class my.database.class并执行该run方法。

例如,这编译

然后做我所期望的。

这也编译

但是会发生这种情况:

这是有道理的,我认为这会起作用:

但它也失败了。我知道我可以将所有这些静态对象变成类,但这在这个应用程序中没有意义,所以我特意寻找优雅的方法来做到这一点。

0 投票
1 回答
148 浏览

scala - Calling methods from each other when using Abstact Class and Factory in Scala (Companion Object)

I'm following "Programming in Scala", on Chapter 10 Type Hierarchy (http://www.artima.com/pins1ed/composition-and-inheritance.html).

I'm receiving the following error in my Scala interactive shell:

Does anyone have any idea why 1) My object cannot recognize the companion class ("extends Element") 2) The method is unable to call another method within the same class/companion object?

I have my class set up as follows:

Thanks for your help!


Update: I tried :paste instead of :load, and still get the following error message:

0 投票
3 回答
415 浏览

scala - 伴随对象的类

我如何获得伴随对象所代表的类?例如:

现在,如果我有一个伴随的用户对象:

我的问题是如何获得“真实”案例类课程?我有一个反射实例,这导致我在尝试在伴随对象中使用 this.getClass 时得到一些奇怪的“私有”构造函数。

0 投票
1 回答
197 浏览

scala - 什么时候从伴生对象中导入隐式?

我知道这是无数隐含/伴随对象问题。但是,我还没有在任何地方找到这个案例。

在“Tryout”中,为什么 A 不需要为隐式类导入,而 B 却需要呢?谢谢。

0 投票
3 回答
5293 浏览

scala - 如何为与替换的编译器提供的隐式伴随对象行为相同的案例类创建显式伴随对象?

我有一个这样定义的案例类:

然后我定义了一个显式的伴随对象:

定义显式伴随对象 StreetSecondary 的行为导致编译器生成的“隐式伴随对象”丢失;即替换为无法访问编译器生成的版本。例如,该tupled方法可通过此隐式伴随对象在案例类 StreetSecondary 上使用。但是,一旦我定义了显式伴随对象,该tupled方法就会“丢失”。

那么,我需要对上述 StreetSecondary 显式伴随对象进行定义/添加/更改,以重新获得因替换编译器提供的隐式伴随对象而丢失的所有功能?而且我想要的不仅仅是tupled恢复的方法。unapply我希望恢复 所有功能(例如,包括 extractor/ )。

感谢您提供的任何方向/指导。


更新 1

我已经做了足够的搜索以发现几件事:

A)显式伴随对象必须在其案例类之前定义(至少在 Eclipse Scala-IDE WorkSheet 中是这种情况,并且代码在 IntelliJ IDE 的 WorkSheet 中不起作用,无论哪个先出现)。

B)有一个强制tupled工作的技术技巧(谢谢 drstevens):(StreetSecondary.apply _).tupled虽然这解决了特定的tupled方法问题,但它仍然不能准确或完整地描述 scala 编译器在隐式伴随对象中提供的内容。

C) 最后,可以定义显式伴随对象来扩展一个函数,该函数匹配主构造函数的参数签名并返回案例类的实例。它看起来像这样:

同样,我仍然不能准确或完整地描述 scala 编译器在隐式伴随对象中提供的内容。

0 投票
1 回答
361 浏览

scala - 值对象可见性的案例类?

是否值得控制代表值对象的案例类的可见性?如果是这样,案例类上的可见性修饰符是否足够,或者使用显式伴随对象和私有构造函数会更好?

版本 1:

版本 2:

总而言之,这个问题可以概括为如何在 scala 中处理值对象。我个人想强制执行 no new,所以我想在创建对象时更改某些内容,我可以随时进行。也就是说,只需在必要时添加一个伴随对象。