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

scala - 案例类的双向引用

是否可以在案例类中实现双向树。这似乎应该很容易,但我被难住了

我想添加一个孩子(并获得一个新的根)——比如

但这不起作用,因为孩子中的“父母”将不再引用将孩子列为孩子的节点。这对于不可变列表和案例类是否可行?

根据下面给出的答案

0 投票
2 回答
221 浏览

scala - 案例类是否允许使用构造函数?

我有一个案例类(让我们命名它Stuff),我希望能够通过扩展特征(称为它Marker)在运行时创建匿名子类。这是一个 REPL 会话的片段,它说明了我正在尝试做的事情:

请注意如何a使用 实例化Stuff.apply(),而在b“案例”中,我正在调用案例类的构造函数。

我的问题是:是否使用构造函数来实例化案例类?在我看来确实如此,因为案例类提供的通常便利,例如==.equals().hashCode(),都可以工作。我是否错过了任何会标记我正在做的坏事 (TM)的事情?

0 投票
2 回答
1928 浏览

scala - Scala 特征/蛋糕模式与案例类

在我的 Web 应用程序中,授权用户至少有 4 个“方面”:http 会话相关数据、持久数据、facebook 数据、运行时业务数据。

我决定使用案例类组合而不是特征至少有两个原因:

  • 特征混合可能导致名称冲突
  • 我想要免费的案例类好东西,比如模式匹配和复制方法

我想知道有经验的 scalaists 对此主题的看法。看起来特征和/或蛋糕模式应该适合此类任务,但正如我上面提到的那样存在问题......很明显,我不仅想快速轻松地实现它,而且还想深入理解它以供使用在未来。

那么我的决定是否有任何缺陷和误解,或者是否正确?相关代码如下所示:

0 投票
7 回答
25323 浏览

scala - 更新嵌套结构的更简洁方法

假设我有以下两个case classes:

和以下Person类实例:

现在,如果我想更新zipCoderaj话,我将不得不这样做:

随着更多级别的嵌套,这变得更加丑陋。有没有更简洁的方法(比如 Clojure 的update-in)来更新这样的嵌套结构?

0 投票
1 回答
1861 浏览

reflection - 案例类上的“productElement(i)”是否使用反射?

考虑以下 Scala 片段:

这里的调用是否inspect()意味着使用反射(以任何方式)?

我希望能够以某种方式访问​​案例类的字段,而不必显式引用它们,例如foo.v1,我喜欢不需要反射的解决方案,因为我希望它需要一些开销。

0 投票
2 回答
24955 浏览

serialization - 为什么案例对象可序列化而案例类不可序列化?

我正在使用这个示例http://scala.sygneca.com/code/remoteactors来了解远程参与者如何在 Scala (2.8.0) 中工作。特别是,我稍微修改了参与者发送的消息的定义方式,如下所示:

一切都按预期工作。不幸的是,如果我将事件定义为案例类而不是案例对象,如下所示:

我的例子停止工作。更详细地说,虽然案例对象是可序列化的,但案例类不是。实际上,当我尝试使用最后一次修改运行我的示例时,我得到以下异常:

案例对象可以序列化而案例类不能序列化是否有原因?有没有办法让我的示例与案例类一起使用?

编辑:正如 Victor 所建议并由 Aaron 确认的那样,我将伴随对象作为消息而不是类发送。此外,使用 javap 检查编译的代码很明显,虽然该类是可序列化的:

伴随对象不是:

现在的问题是:如何指定我想使用类而不是伴随对象?当我按照 Aaron 的建议发送消息时,我还添加了一对空括号,如下所示:

但没有任何改变。最后我还在案例类中添加了一个假参数

将消息发送为:

但仍然没有任何区别。有什么建议吗?

0 投票
5 回答
21816 浏览

scala - 声明 Scala 案例类有什么缺点?

如果您正在编写使用大量漂亮、不可变数据结构的代码,案例类似乎是天赐之物,只需一个关键字即可免费为您提供以下所有功能:

  • 默认情况下一切都是不可变的
  • 自动定义的吸气剂
  • 体面的 toString() 实现
  • 符合 equals() 和 hashCode()
  • 带有用于匹配的 unapply() 方法的伴侣对象

但是将不可变数据结构定义为案例类有什么缺点呢?

它对类或其客户有什么限制?

在某些情况下您应该更喜欢非案例课程吗?

0 投票
3 回答
3196 浏览

scala - 以案例类为键的高效映射在 Scala 中?

以下 C 代码使用枚举和数组作为从枚举到任何事物的有效“映射”:

Scala有可能吗?
即有一个从案例类到某物的“映射”,实现为高效数组而不是树或哈希图。然而,我希望能够仅使用特定类型而不是 Int 进行索引。

更新:简而言之,我希望 Scala Array 由某种枚举(案例类或枚举)索引。

0 投票
3 回答
7682 浏览

scala - 在 trait 中依赖 case 类的方法

有没有办法依赖在特征中的案例类中定义的方法?例如,复制:以下不起作用。不过,我不确定为什么。

给出:

0 投票
2 回答
3100 浏览

scala - Scala中嵌套类型的模式匹配

我正在尝试实现一些在 Scala 中实际上是枚举的东西。我想使用案例类来做到这一点,以便编译器能够检测到任何非详尽的模式匹配。

这在非常基本的形式下工作正常,例如:

然而,这并不理想,因为案例对象的名称很容易发生冲突:

显而易见的解决方案是将案例对象放入单独的命名空间中:

但是如何在匹配块中引用这些类?

它们不能用 Java 样式的点来引用:

“#”符号似乎也不起作用:

这种形式也不起作用:

这是有道理的,因为在这种情况下“Left”是一个实例而不是一个类型,我怀疑有一种简单的方法来引用该类型。我能达到的最接近的目标是:

}

但是虽然这使得匹配块编译得很好,但我找不到任何方法来实际引用这些对象,例如将这个“枚举”的成员传递给函数。这是因为 Horizo​​ntalAlignment 是一种类型而不是对象,因此无法使用字段访问来引用其中一个嵌套对象,另一方面,这些对象不是类型,因此无法使用“#“ 象征。

有没有办法从该类外部引用嵌套在该类中的对象?

编辑

到目前为止,我发现包对象是解决这个问题的最好方法。

}

但是,上述问题(访问类中的嵌套对象)仍然存在。