问题标签 [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.
scala - 案例类的双向引用
是否可以在案例类中实现双向树。这似乎应该很容易,但我被难住了
我想添加一个孩子(并获得一个新的根)——比如
但这不起作用,因为孩子中的“父母”将不再引用将孩子列为孩子的节点。这对于不可变列表和案例类是否可行?
根据下面给出的答案
scala - 案例类是否允许使用构造函数?
我有一个案例类(让我们命名它Stuff
),我希望能够通过扩展特征(称为它Marker
)在运行时创建匿名子类。这是一个 REPL 会话的片段,它说明了我正在尝试做的事情:
请注意如何a
使用 实例化Stuff.apply()
,而在b
“案例”中,我正在调用案例类的构造函数。
我的问题是:是否使用构造函数来实例化案例类?在我看来确实如此,因为案例类提供的通常便利,例如==
、.equals()
和.hashCode()
,都可以工作。我是否错过了任何会标记我正在做的坏事 (TM)的事情?
scala - Scala 特征/蛋糕模式与案例类
在我的 Web 应用程序中,授权用户至少有 4 个“方面”:http 会话相关数据、持久数据、facebook 数据、运行时业务数据。
我决定使用案例类组合而不是特征至少有两个原因:
- 特征混合可能导致名称冲突
- 我想要免费的案例类好东西,比如模式匹配和复制方法
我想知道有经验的 scalaists 对此主题的看法。看起来特征和/或蛋糕模式应该适合此类任务,但正如我上面提到的那样存在问题......很明显,我不仅想快速轻松地实现它,而且还想深入理解它以供使用在未来。
那么我的决定是否有任何缺陷和误解,或者是否正确?相关代码如下所示:
scala - 更新嵌套结构的更简洁方法
假设我有以下两个case class
es:
和以下Person
类实例:
现在,如果我想更新zipCode
的raj
话,我将不得不这样做:
随着更多级别的嵌套,这变得更加丑陋。有没有更简洁的方法(比如 Clojure 的update-in
)来更新这样的嵌套结构?
reflection - 案例类上的“productElement(i)”是否使用反射?
考虑以下 Scala 片段:
这里的调用是否inspect()
意味着使用反射(以任何方式)?
我希望能够以某种方式访问案例类的字段,而不必显式引用它们,例如foo.v1
,我喜欢不需要反射的解决方案,因为我希望它需要一些开销。
serialization - 为什么案例对象可序列化而案例类不可序列化?
我正在使用这个示例http://scala.sygneca.com/code/remoteactors来了解远程参与者如何在 Scala (2.8.0) 中工作。特别是,我稍微修改了参与者发送的消息的定义方式,如下所示:
一切都按预期工作。不幸的是,如果我将事件定义为案例类而不是案例对象,如下所示:
我的例子停止工作。更详细地说,虽然案例对象是可序列化的,但案例类不是。实际上,当我尝试使用最后一次修改运行我的示例时,我得到以下异常:
案例对象可以序列化而案例类不能序列化是否有原因?有没有办法让我的示例与案例类一起使用?
编辑:正如 Victor 所建议并由 Aaron 确认的那样,我将伴随对象作为消息而不是类发送。此外,使用 javap 检查编译的代码很明显,虽然该类是可序列化的:
伴随对象不是:
现在的问题是:如何指定我想使用类而不是伴随对象?当我按照 Aaron 的建议发送消息时,我还添加了一对空括号,如下所示:
但没有任何改变。最后我还在案例类中添加了一个假参数
将消息发送为:
但仍然没有任何区别。有什么建议吗?
scala - 声明 Scala 案例类有什么缺点?
如果您正在编写使用大量漂亮、不可变数据结构的代码,案例类似乎是天赐之物,只需一个关键字即可免费为您提供以下所有功能:
- 默认情况下一切都是不可变的
- 自动定义的吸气剂
- 体面的 toString() 实现
- 符合 equals() 和 hashCode()
- 带有用于匹配的 unapply() 方法的伴侣对象
但是将不可变数据结构定义为案例类有什么缺点呢?
它对类或其客户有什么限制?
在某些情况下您应该更喜欢非案例课程吗?
scala - 以案例类为键的高效映射在 Scala 中?
以下 C 代码使用枚举和数组作为从枚举到任何事物的有效“映射”:
Scala有可能吗?
即有一个从案例类到某物的“映射”,实现为高效数组而不是树或哈希图。然而,我希望能够仅使用特定类型而不是 Int 进行索引。
更新:简而言之,我希望 Scala Array 由某种枚举(案例类或枚举)索引。
scala - 在 trait 中依赖 case 类的方法
有没有办法依赖在特征中的案例类中定义的方法?例如,复制:以下不起作用。不过,我不确定为什么。
给出:
scala - Scala中嵌套类型的模式匹配
我正在尝试实现一些在 Scala 中实际上是枚举的东西。我想使用案例类来做到这一点,以便编译器能够检测到任何非详尽的模式匹配。
这在非常基本的形式下工作正常,例如:
然而,这并不理想,因为案例对象的名称很容易发生冲突:
显而易见的解决方案是将案例对象放入单独的命名空间中:
但是如何在匹配块中引用这些类?
它们不能用 Java 样式的点来引用:
“#”符号似乎也不起作用:
这种形式也不起作用:
这是有道理的,因为在这种情况下“Left”是一个实例而不是一个类型,我怀疑有一种简单的方法来引用该类型。我能达到的最接近的目标是:
}
但是虽然这使得匹配块编译得很好,但我找不到任何方法来实际引用这些对象,例如将这个“枚举”的成员传递给函数。这是因为 HorizontalAlignment 是一种类型而不是对象,因此无法使用字段访问来引用其中一个嵌套对象,另一方面,这些对象不是类型,因此无法使用“#“ 象征。
有没有办法从该类外部引用嵌套在该类中的对象?
编辑
到目前为止,我发现包对象是解决这个问题的最好方法。
}
但是,上述问题(访问类中的嵌套对象)仍然存在。