重写取消应用方法

2023-11-24

我有一个case来自图书馆课程,我想覆盖unapply method 减少参数数量我需要通过对其进行模式匹配。我这样做:

object ws1 {
  // a library class
  case class MyClass(a: Int, b: String, c: String, d: Double /* and many more ones*/)

  // my object I created to override unapply of class MyClass
  object MyClass {
    def unapply(x: Int) = Some(x)
  }

  val a = new MyClass(1, "2", "3", 55.0 /* and many more ones*/)
  a match {
    case MyClass(x /*only the first one is vital*/) => x  // java.io.Serializable = (1,2,3,55.0)
    case _ => "no"
  }
}

但我希望它返回1。这有什么问题吗?


case class MyClass(a: Int, b: String, c: String, d: Double /* and many more ones*/)
object MyClassA {
   def unapply(x: MyClass) = Some(x.a)
}

val a = new MyClass(1, "2", "3", 55.0 /* and many more ones*/)

a match {
    case MyClassA(2) => ??? // does not match
    case MyClassA(1) => a   // matches
    case _ => ??? 
}

您无法定义您的自定义unapply方法中的MyClass对象,因为它必须采取MyClass参数,并且已经有一种这样的方法 - 为案例类自动生成的一种方法。因此你必须在不同的对象中定义它(MyClassA在这种情况下)。

Scala 中的模式匹配获取您的对象并应用多个unapply and unapplySeq方法直到它得到Some其值与模式中指定的值相匹配。
MyClassA(1)火柴a if MyClassA.unapply(a) == Some(1).

注意:如果我写case m @ MyClassA(1) =>,那么m变量的类型MyClass.

Edit:

a match {
    case MyClassA(x) => x  // x is an Int, equal to a.a
    case _ => ??? 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重写取消应用方法 的相关文章

随机推荐

  • 如何取消 URL 会话请求

    我使用将图像转换为 base64 并将图像作为参数发送到 API 中 将多个图像上传到服务器 但是 当我们一次又一次调用 api 时 如何停止单击按钮时的 api 调用 我正在使用下面的代码来调用 API 提前致谢 let urlPath
  • Windows 上的 QtCreator 使用 CodeSourcery 工具链为 Linux ARM 进行交叉编译

    我在 Windows 7 计算机上安装了 Qt Creator 我的目标是 OMAP3 嵌入式 Linux 板 我下载了目标工具链 Sourcery G Lite for Windows 并安装了 MinGW http www mingw
  • 如何将 npm 与 node.exe 一起使用?

    我已经从 Windows 下载了 Nodejs 的二进制文件 exe 主页 我该如何安装和使用npm 节点包管理器 当前的 Windows 安装程序来自节点js org从 v0 6 11 2012 02 20 开始 NPM 将与 NodeJ
  • C 中混合使用“switch”和“while”

    我最近读过这一页关于奇怪的 C 片段代码 其中大多数是可以理解的 但我无法理解这一点 switch c 3 while c 4 gt 0 foo case 3 foo case 2 foo case 1 foo case 0 谁能帮我看看这
  • 如何在 Oracle 10gR2 和 JPA 中做到不区分大小写和不区分重音?

    在 J2EE 项目中 使用 JPA 如何强制类似查询不区分大小写和重音 我知道更改会话变量 NLS COMP 和 NLS SORT 但我想知道是否还有另一个技巧可以在查询本身中执行此操作 而不更改会话变量 使用 JPA 如何强制类似查询不区
  • 无法对基本类型 double 调用compareTo(double)

    线路return array index1 compareTo array index2 提供了一个错误 无法对基本类型 double 调用compareTo double 如何解决这个问题 This function implements
  • 如何判断DLL是COM还是.NET?

    我有一个更新程序 从服务器提取的文件在一个目录中混合了 vb6 dll 和 net DLL 如何判断一个dll是否是COM dll 所以我可以调用regsvr32从更新程序到它 我想一种方法是尝试使用以下命令加载文件System Refle
  • KornShell 中的正则表达式

    我试图检查一个变量是否恰好是两个数字 但我似乎无法弄清楚 如何在 KornShell ksh 中检查正则表达式 regex 我努力了 if month 0 9 2 if month 0 9 2 我无法找到任何有关它的文档 有什么见解吗 ca
  • 路由器后面的android套接字编程

    我有疑问或问题 我正在尝试在两部 Android 手机之间建立 p2p 连接 我将每部电话连接到我的服务器 并获取它们的私有 192 168 1 1 和公共 76 123 288 22 IP 以及它们连接到我的服务器的端口 当电话连接到服务
  • 使用 IdentityServer4 从多个 API 创建用户

    所以我已经为这个问题苦恼了一段时间了 我们有一个网络应用程序正在使用身份服务器4 and AspNet身份验证和注册用户 这是按预期工作的 此外 我们还有另一个 API 在同一解决方案中 能够使用 IdentityServer4 对访问 A
  • iOS - 在导航栏标题中添加图像和文本

    我想创建一个类似于所附图像中的导航栏 导航栏的标题将是图像和文本的组合 是否应该按照最佳实践来完成此操作 如何做呢 As 这个答案显示 最简单的解决方案是将文本添加到图像中 然后将该图像添加到导航栏 如下所示 var image UIIma
  • 如果用户使用 IE8 浏览则禁用脚本

    如果用户使用 Internet Explorer 8 浏览 我想要一个 javascript 代码来禁用我编写的脚本 尝试这个 用于禁用 IE 8 的脚本 用于禁用 IE 8 及更高版本的脚本
  • 有没有简单的方法可以在没有 site:site 的情况下从 Maven 生成 Findbug HTML 报告?

    我正在尝试将 FindBugs 集成到 Maven 项目中 有人有样品吗pom xml在目标中生成一个简单的 findbug HTML 报告 是否可以生成此报告而无需运行site site Findbugs jar 包含 5 个 XSLT
  • 如何更改导航栏颜色?

    我想要一个半透明的状态栏和一个其他颜色的导航栏 而不是半透明的 如蓝色或白色 My code
  • 如何检查提供的 CSRF 令牌在 Symfony2 中是否无效?

    我创建了一个 Symfony2 表单并将其绑定到请求 在继续处理表单的其余部分之前 我需要明确确保 CSRF 令牌是否有效 无效 form token gt isValid throws OutOfBoundsException消息 Chi
  • 如何解析格式为“Name ”的字符串

    我有一种方法可以接收以下格式之一的联系人 1 电子邮件受保护 2 名称 电子邮件受保护 gt 或 姓名 电子邮件受保护 gt 可以存在空格 如果它是格式 1 我什么也不做 对于 2 我需要解析姓名和电子邮件 我永远不知道我会收到哪种格式的电
  • 无法解析符号 AndroidJUnit4

    我正在尝试为我的应用程序添加登录facebook 但是当我添加执行此操作所需的存储库时 它导致了一个错误 AndroidJUnit4 现在无法解析 示例InstrumentedTest java package com example us
  • Cordova 想要 android-19,我有 android-20

    这里有很多关于运行 cordova add platform android 命令的问题的问题 我已经尝试了每种有目的的解决方案 但没有一个对我有帮助 错误信息 sandbox hello cordova platform add andr
  • CMake 中 CUDA 库的链接

    我正在使用 CMake 3 10 并且在将已编译的库链接到 CMake 中的测试可执行文件时遇到问题 我进行了大量搜索 发现在早期版本中存在一个问题 即无法在结果可执行文件中链接中间库 我无法判断这是否已解决或仍然是一个问题 我的 CMak
  • 重写取消应用方法

    我有一个case来自图书馆课程 我想覆盖unapply method 减少参数数量我需要通过对其进行模式匹配 我这样做 object ws1 a library class case class MyClass a Int b String