问题标签 [case-class]

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 投票
2 回答
2195 浏览

scala - Scala:伴随对象与案例类的定义顺序

在 Scala 2.9.1 中,我得到以下行为:

编译器抱怨Object Z:错误:Z 已经定义为(编译器生成的)案例类伴随对象 Z

看起来好像不允许在案例类定义之后为案例类定义伴随对象,如果它们在函数定义中。这是编译器错误还是故意的?如果是后者,为什么?

0 投票
2 回答
815 浏览

scala - 自动散列consed case类

我正在寻找一种方法来让类的行为就像案例类一样,但会自动散列 consed

为整数列表实现此目的的一种方法是:

并且,例如,虽然

我们得到

现在我正在寻找的是一种通用的方法来实现这一点(或非常相似的东西)。理想情况下,我不想输入更多内容:

(或类似的)。有人可以想出一些类型系统巫毒来帮助我,还是我必须等待宏语言可用?

0 投票
2 回答
8968 浏览

scala - Scala: Case class unapply vs a manual implementation and type erasure

I'm trying to understand what Scala does with Case Classes that makes them somehow immune to type erasure warnings.

Let's say we have the following, simple class structure. It's basically an Either:

And you're trying to use it like this:

Everything compiles and runs without any problems. However, when I try implementing the unapply method myself, the compiler throws a warning. I used the following class structure with the same Main class above:

Compiling that with the -unchecked flag issues the following warning:

Now, I understand type erasure and I've tried to get around the warning with Manifests (to no avail so far), but what is the difference between the two implementations? Are case classes doing something that I need to add in? Can this be circumvented with Manifests?

I even tried running the case class implementation through the scala compiler with the -Xprint:typer flag turned on, but the unapply method looks pretty much like I expected:

0 投票
4 回答
807 浏览

scala - Scala子案例类参数名称与父案例类参数名称冲突

假设我们有以下两个类:

将它们都设置为 case 类会导致两个param使用位置出现错误,这表示它需要override修饰符来覆盖父类的值。这对我来说看起来很奇怪..为什么我必须在这里发明其他参数名称..为什么要强制执行这种顺序?利润在哪里?

0 投票
4 回答
1576 浏览

scala - 如何在 Scala 中拆分充满选项的案例类

我对 Scala 很陌生,我仍在努力适应语法和风格,所以这可能是一个非常简单的问题。

我正在使用一个代码库,其中有很多用这样的选项填充的案例类:

Person在上面的例子中Pants Pocket,如果他们确实穿着裤子......有口袋,如果他们有钱,你将如何退还他们的钱?

0 投票
3 回答
2320 浏览

scala - Scala案例类树中的更改节点

假设我有一些使用案例类构建的树,如下所示:

现在我想构建一种方法来将具有某个 id 的节点更改为另一个节点。这个节点很容易找到,但是不知道怎么改。有没有简单的方法可以做到这一点?

0 投票
1 回答
278 浏览

scala - 抽象案例类

我正在探索在 Scala 中抽象案例类的方法。例如,这是一个尝试Either[Int, String](使用 Scala 2.10.0-M1 和-Yvirtpatmat):

鉴于这个定义,我可以写这样的东西:

这是模块的第一个实现,其中 的表示Either是 a String

unapplys 使LeftandRight真正排他性,所以以下工作符合预期:

到目前为止,一切都很好。我的第二次尝试是scala.Either[Int, String]用作以下的自然实现Module.EitherIntOrString

但这不能按预期工作:

有没有办法得到正确的结果?

0 投票
2 回答
7242 浏览

scala - 为什么参数在逆变位置?

我正在尝试在特征中使用协变类型参数来构造一个案例类,如下所示:

编译器说:

然后我尝试了以下方法,但它也没有奏效:

这次的错误是:

有人可以解释为什么 T 在这里处于协变位置并为这个问题提出解决方案吗?谢谢!

0 投票
2 回答
1928 浏览

scala - Scala - 使用伴随对象作为函数接受块的速记参数

我有一组模型对象和一组包装器对象来赋予它们额外的功能。

我希望能够使用允许您编写的相同速记简明地将模型对象的集合转换为包装器对象List("x", "y", "z").foreach(println),如下所示:

因此ModelWrapper,作为参数传递的 被转换为ModelWrapper(_)对伴随对象的调用。

但是,当我尝试这个时,我得到一个类型不匹配的错误,如下所示:

但是,如果我创建ModelWrapper一个case class, 并删除伴随对象,它就可以工作。我不想让它成为一个案例类,因为它添加的行为不适合案例类工作的整体方式。例如,具有相同模型类作为参数的两个包装类不一定相等。

我想知道的是,在这种情况下,案例类和伴随对象有什么区别?我可以在不使用案例类的情况下得到我想要的吗?

0 投票
3 回答
400 浏览

scala - 案例类和特征的线性化

假设我想写一个case类Stepper如下:

它带有一个很好的toString实现:

但这并不是一个真正的功能:

一种解决方法是实现Function特征......

但是,我不能再免费获得一个好的 toString 实现了:

那么,问题是:我能拥有这两个世界中最好的吗?有没有一种解决方案,我可以toString免费提供很好的实现trait 的实现Function。换句话说,有没有办法以最终应用case class语法糖的方式应用线性化?