问题标签 [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 投票
10 回答
49543 浏览

scala - 如何在案例类同伴中覆盖应用

所以这里的情况。我想像这样定义一个案例类:

我想定义一个对象以确保当我创建类的实例时,'s' 的值始终是大写的,如下所示:

但是,这不起作用,因为 Scala 抱怨 apply(s: String) 方法被定义了两次。我知道案例类语法会自动为我定义它,但是我没有其他方法可以实现这一点吗?我想坚持使用 case 类,因为我想将它用于模式匹配。

0 投票
4 回答
32226 浏览

scala - Scala中案例类中的hashCode

我读过 Scala'acase class构造会自动生成拟合equalshashCode实现。生成的代码到底是什么样的?

0 投票
1 回答
632 浏览

json - scala lift json:未知数据的模式匹配?

我有一些我无法更改的奇怪 json,我希望使用 JsonParsen in lift 解析它。

一个典型的 json 是这样的:

问题是数据的键是未知的(data_xxxxx,其中 xx:s 未知)。这是糟糕的 json,但我必须忍受它。

当此处的键未知但结构已知时,我应该如何在 scala 中设置案例类以便能够构建正确的结构?

0 投票
2 回答
7680 浏览

scala - Scala中的有界类型参数化案例类和默认参数的问题

考虑以下(使用 Scala 2.8.1 和 2.9.0 测试):

最后一行失败:

更改它以val dogMap = AnimalsMap[Dog](Map())修复它,但不再利用默认参数值。

鉴于 List 对应项按预期工作,为什么默认值被推断为 Map[Nothing,Nothing]?有没有办法创建一个使用maparg 的默认值的 AnimalsMap 实例?


编辑:我已经接受了对我更紧迫的第二个问题的回答,但我仍然想知道为什么Map()在这两种情况下推断的键类型不同:


编辑2:似乎类型界限是无关紧要的 - 案例类的任何参数类型都会导致问题:

0 投票
3 回答
2393 浏览

scala - 在 Scala 中,如何以编程方式确定案例类的字段名称?

在 Scala 中,假设我有一个这样的案例类:

有没有办法让我获得一个Seq[(String, Class[_])],或者更好Seq[(String, Manifest)]的,描述案例类的参数?

0 投票
3 回答
7753 浏览

scala - 用提取器替换案例类继承,在 Scala 中保留详尽性检查

我有一个简单的类层次结构,它表示一个类似图形的结构,其中包含使用案例类实现的几种不同类型的顶点:

这允许我编写这样的匹配块:

或像这样:

请注意,此实现具有以下属性:

1) 它允许编写区分弧和顶点的匹配块,但不能区分特定的顶点类型,但也允许编写区分顶点类型的匹配块。

2) 在特定于顶点类型和非特定于顶点类型的匹配块中,检查模式匹配的穷举性。

但是,不推荐从案例类继承,并且编译器建议使用提取器来支持非叶节点上的匹配(即,在上面的示例中,区分弧和顶点,但不区分顶点类型)。

问题:是否可以在不使用案例类继承的情况下实现类似的类层次结构,但在上面显示的两个用例中仍然由编译器执行模式详尽性检查?

编辑:我在 VertexType 类中添加了一个构造函数参数,以便不仅仅对类型执行匹配。

我当前没有案例类的实现如下:

和测试代码:

我希望在第二个块中出现关于非详尽匹配的警告(VertexType2 永远不会匹配),但没有一个。

实际上,2.9.0-RC3 之前的 Scala 编译器会产生我希望看到的警告,但以 RC3 开头的版本(包括 2.9.0 和 2.9.0-1)不会,这相当令人困惑。

0 投票
2 回答
814 浏览

scala - 使用 Scala 案例类作为事实上的映射

这更像是一个设计问题...

我真的很喜欢 Scala 的案例类并且经常使用它们。但是,我发现我经常将我的参数包含在Options(或者更确切地说,Lift's Boxes)中并设置默认值以允许灵活性并考虑到用户可能并不总是指定所有参数。我想我采用了这种做法。

我的问题是,这是一个合理的方法吗?鉴于一切都可能是可选的,可能会有很多样板和检查,以至于我想知道我是否不只是使用我的案例类,Map[String, Any]并且想知道我是否会更好地使用Map.

让我给你一个真实的例子。在这里,我正在模拟汇款:

我认为比较容易理解。在这个最简单的情况下,我们可以Transaction这样声明:

我已经可以想象你认为它很冗长。如果我们指定所有内容:

另一方面,尽管不得不Full到处乱扔,你仍然可以做一些很好的模式匹配:

这是一个合理的方法吗?使用 a 会更好地为我服务Map吗?或者我应该以不同的方式使用案例类吗?也许使用案例类的整个层次结构来表示具有不同指定信息量的交易?

0 投票
1 回答
1791 浏览

scala - 为什么 Scala 编译器说 copy 不是我的案例类的成员?

首先,这是在 Scala 2.8 中,所以它应该在那里!=)

我正在研究 Lift 的 Javascript 对象,我想要以下内容:

不幸的是,我收到以下编译器错误:

案例类有属性,所以应该有copy方法吧?

如果我尝试this.copy,我会得到几乎相同的错误:

为什么会这样以及如何copy在我的案例类方法中使用?copy还是编译器在声明我的方法后添加的想法?

我应该这样做吗?

0 投票
3 回答
521 浏览

scala - Scala 2.9 中的案例类和代理行为

在将我们的代码迁移到 Scala 2.9 时,我们发现大量代码不起作用并且默默地失败了。我们将其追踪到扩展 Proxy 不相等的案例类。在我们的代码中,我们不直接扩展 Proxy,我们只是在扩展 Proxy 的库中扩展类。

任何帮助将不胜感激。

在 2.8

在 2.9

更新

我认为这只能是 Scala 2.9 中的一个错误。否则,如果您有一个扩展任何其他类的案例类,您必须调查该基类的层次结构,以确保它绝不会扩展代理。我们将无法在我们的代码中执行此操作,我们只能修复更明显的错误。如果这是预期行为,那么编译器警告是必须的。那个听起来是对的吗?

更新

也在scala 邮件列表中讨论。

更新

我提交了一个错误

0 投票
1 回答
538 浏览

scala - 自制提取器和案例类提取器的区别

根据 scala 规范,案例类构建的提取器如下(scala 规范§5.3.2):

出于实现原因,我希望能够在非案例类上模仿此提取器的行为。但是,我的实现无法重现相同的行为。

这是我有差异的一个例子:

我有以下警告:

请注意,警告仅在D案例中出现,而不是在案例类 textractor 案例中。您对警告的原因/我应该做些什么来避免这个警告有任何想法吗?

注意:如果你想在 REPL 中测试它,最简单的方法是:

  1. 激活未经检查的警告

    斯卡拉>:权力

    scala> settings.unchecked.value = true

  2. 在粘贴模式下复制上面的代码:

    斯卡拉>:粘贴

    [复制粘贴]

    [Ctrl + D]

编辑:正如安托拉斯所说,它应该是一个编译器错误,也许 scala 版本可能有用:scala 2.9.0.1(经过快速测试,scala 2.9.1RC2 中仍然存在)