class - 向 Scala 案例类添加一个字段?

标签 class scala case

我看过一些关于Pimp my Library pattern 的博客,这些似乎很适合向类添加行为。

但是如果我有一个case 类 并且我想向它添加数据成员 怎么办?作为案例类,我无法扩展它(不推荐/强烈反对从案例类继承)。这些皮条客模式是否允许我向案例类添加数据?

最佳答案

不 - 我不明白你如何使它工作,因为 丰富的实例 通常被丢弃(注意:新的 pimp-my-library 模式被称为 enrich-my-library) .例如:

scala> case class X(i: Int, s: String)
defined class X

scala> implicit class Y(x: X)  {
   |     var f: Float = 0F
   |   }
defined class Y

scala> X(1, "a")
res17: X = X(1,a)

scala> res17.f = 5F
res17.f: Float = 0.0

scala> res17.f
res18: Float = 0.0

你必须确保你保留了包装的实例:

scala> res17: Y
res19: Y = Y@4c2d27de

scala> res19.f = 4
res19.f: Float = 4.0

scala> res19.f
res20: Float = 4.0

但是,我发现这在实践中没有用。你有一个包装器;你最好明确说明这一点

关于class - 向 Scala 案例类添加一个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11053214/

相关文章:

基于条件的 Python 类定义

c++ - C4512 无法生成赋值运算符

c++ - 从另一个 cpp 更新文本框值

algorithm - Scala 中的邻接表路径

java - 如何求和 2 个 joda-time DateTime 值(一个包含日期和零时间,另一个包含时间和零日期)?

scala - 监控封闭图 Akka Stream

ruby - 具有类继承的错误未初始化常量

sql - 按期间分组时带入前 12 个月的计数

mysql - 在 GROUP BY 级别上使用 "CASE"命令

mysql - 使用 SELECT CASE 和 SUM : MYSQL