当前位置: 首页 > 知识库问答 >
问题:

case类上的Scala断言未知参数

邢项禹
2023-03-14

假设我有一个直接转换db表的case类,在创建新行时将随机生成id。

case class Test(id: UUID, name: String)

现在查看这些测试,我需要从测试中检索一行,并将其与

val test1 = (...., "testName")

但是我没有第一个参数,因为它是随机创建的,我想以某种方式忽略它...

我试过了

test1 = (_, "testName")

但这是无效的。

有什么方法可以在Scala中忽略case类参数吗?

谢谢

共有2个答案

弘志勇
2023-03-14

要回答提出的问题,答案是否定的。case类实例由其字段的值定义。它们不像普通类那样具有标识属性。因此,无法实例化缺少参数的case类。

锺离飞鸣
2023-03-14

假设我们有

case class Test(id: UUID, name: String)

这里有一个函数,用于测试两个实例的相等性,忽略id字段。

def myEquality(a: Test, b: Test): Boolean =
  a == b.copy(id=a.id)

我们不能明确地告诉Scala忽略一个字段,但我们可以很肯定地将该字段模拟为正确的值。由于这些都是case类(即不可变的),我们不能通过这个简单的技巧搞乱任何其他不相关的数据结构。

 类似资料:
  • 当我在EclipseSWT中使用TableViewer创建组合框时,特别是只有第三列。 到目前为止,我认为我做的一切都很好,但是当我编译代码时,我发现错误: 代码: 问题:如何仅在一列中显示组合框?

  • 示例: 这两个序列必须匹配。

  • 问题内容: 我知道我可以通过反射来获取对象的值,然后使用类型断言使用以下方法来获取实际对象: 但是,如果我不知道对象的类型是,该怎么办呢?说它在像这样的函数中: 在函数内部,您将永远不知道实际上将传递哪种类型的对象,那么如何完成类型声明? 问题答案: 你不能 类型断言使您可以利用语言为您提供的静态类型检查,即使您有一个接口,其类型不是静态检查的。基本上它是这样的: 你有一些静态类型的变量,它有型。

  • 我看到过一些关于的博客,这些博客似乎可以很好地为类添加行为。 但是,如果我有一个并且我要怎么办?作为一个case类,我不能扩展它(不推荐/强烈不鼓励从case类继承)。这些皮条客模式是否允许我将数据添加到case类中?

  • 我想消除此示例代码中的类型擦除警告: 它编译和工作正常,但有一个警告: 警告:(31,13)类型模式Seq[Int](Seq[Int]的底层)中的非变量类型参数Int未选中,因为它被擦除情况b消除:Seq[Int]= 在这种情况下,你有什么简单的解决方案来避免擦除吗? 到目前为止,我尝试了什么(根据这一点): 但是它不能编译,因为c现在是Any类型。 我相信这个问题有几种解决方法。我会接受最简单的