是否存在 unapply 总是返回 Option 的规则?

2023-12-27

我尝试创建一个unapply模式匹配中使用的方法,我试图让它返回与Option但是,Eclipse 将其显示为错误。有没有这样的规定unapply必须返回一个Option[T] ?

编辑:这是我尝试使用的代码。我切换了上一节的代码,以便unapply返回一个布尔值

import java.util.regex._

object NumberMatcher {
  def apply(x:String):Boolean = {
    val pat = Pattern.compile("\\d+")
    val matcher = pat.matcher(x)
    return matcher.find
  }

  def unapply(x:String):Boolean = {
    val pat = Pattern.compile("\\d+")
    val matcher = pat.matcher(x)
    return matcher.find
  }
}

object x {
  def main(args : Array[String]) : Unit = {
    val strings = List("geo12","neo493","leo")
    for(val str <- strings) {
      str match {
        case NumberMatcher(group) => println(group)
        case _ => println ("no")
      }
    }
  }
}

日食 说wrong number of arguments for object NumberMatcher。这是为什么?


如果您想退货unapply, 将其返回到里面Some。返回Boolean只是测试是否可以匹配。

以下是模式匹配的翻译方式:

str match { 
  case NumberMatcher(group) => println(group)
  case _ => println("no")
}

假设NumberMatcher回报Option[...],它会做:

val r1 = NumberMatcher.unapply(str)
if (r1 != None) {
  val group = r1.get
  println(group)
} else {
  println("no")
}

If NumberMatcher返回布尔值,然后你可以让它接收一些东西。在这种情况下,会发生以下情况:

str match { 
  case NumberMatcher() => println("yes")
  case _ => println("no")
}

becomes

val r1 = NumberMatcher.unapply(str)
if (r1) {
  println("yes")
} else {
  println("no")
}

请注意,这是一个非常肤浅解释。大小写匹配可以测试常量、具有额外的保护条件、替代方案、使用unapply递归地,使用unapplySeq等等。这里我仅展示解决特定问题的非常基本的用法。我强烈建议寻找模式匹配的更全面的解释。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否存在 unapply 总是返回 Option 的规则? 的相关文章

  • 获取 N 的素数列表

    我正在尝试编写一个函数 它接受一个 Int 并返回直到并包括该 Int 的所有素数 例如 8 的素数列表 List 3 5 7 这是我到目前为止所拥有的 def isPrime i Int Boolean if i lt 1 false e
  • Javascript 作为一种函数式语言

    我正在寻求掌握函数式编程概念 我多年来一直在 Web 应用程序中使用 Javascript 进行客户端脚本编写 除了使用原型之外 它都是简单的 DOM 操作 输入验证等 最近 我有经常阅读 http eloquentjavascript n
  • 了解函数类型

    我在尝试理解 Haskell 如何确定函数类型时感到有点困惑 这是一个例子 boolFcn x y x 3 y 4 当我检查上述函数的类型时 它给出了结果 Num a1 Num a Eq a1 Eq a gt a gt a1 gt Bool
  • Scala:列表中不同的foldRight实现

    我刚刚发现 scala 我在 2 12 上 提供了完全不同的实现向右折叠 for 不可变列表 and 可变列表 不可变列表 List scala override def foldRight B z B op A B gt B B reve
  • 缓存隐式解析

    为了减少项目的编译时间 我缓存了通过隐式查找解析的某些类型类 但这看起来有点麻烦 因为直接的实现不起作用 scala gt implicit val x String implicitly String x String null 隐式查找
  • 如何让 Either Monads 了解异步函数(Promises/Future)

    我正在尝试使用 Either Monad 来传输数据 问题是我无法弄清楚如何让我的 Monad 意识到异步操作 这是我所拥有的 let processData Either either sendError sendResponse pro
  • 尝试使用连续传递风格来避免极小极大算法的堆栈溢出

    我的目标摘要 弄清楚如何使用连续传递样式来避免在使用我认为无法进行尾递归的算法时出现堆栈溢出 或者 找到一种方法使函数成为尾递归 Details 我是 F 以及一般函数式编程 的新手 我正在尝试通过 alpha beta 剪枝实现极小极大算
  • 作为单例集合的选项 - 现实生活中的用例

    标题几乎概括了这一点 Option作为单例集合有时会令人困惑 但有时它允许一个有趣的应用程序 我脑子里有一个例子 并且想了解更多这样的例子 我唯一的例子是运行for对的理解Option List T 我们可以执行以下操作 val v Som
  • 当恰好有一个选项非空时执行某项操作

    如果两个选项之一非空 我想计算一些东西 显然这可以通过模式匹配来完成 但是有更好的方法吗 o1 o2 match case Some o None gt Some compute o case None Some o gt Some com
  • 重载方法值与替代方法的聚合

    我有以下函数 但无法编译 private def save pea KStream String String Unit pea groupByKey aggregate gt folder String String value Stri
  • F# 中灵活类型注释的用途是什么?

    我正在学习 F 我不明白灵活类型的目的 或者更好的是 我无法理解这样写的区别 set TextOfControl c Control s c Text lt s 并写下 set TextOfControl c T when T gt Con
  • 在这些情况下限制破折号的正则表达式模式

    Scenario 我正在使用第三方文件重命名软件 该软件是用 Delphi 编写的 并且具有 pascal 脚本支持 该应用程序允许使用正则表达式来重命名文件 这意味着 如果我需要对文件名执行的操作不能仅使用一个正则表达式来完成 那么我可以
  • 使用值类参数的 Mockito 存根方法失败并出现 NullPointerException

    使用类型化值类作为 ID 是 Scala 中的常见模式 然而 在存根以值类作为参数的方法时 Mockito 似乎遇到了问题 在下面的示例中 第一个具有实际值的存根工作得很好 但第二个使用参数匹配器的存根会抛出 NullPointerExce
  • Scala 中的 Case 对象与枚举

    是否有关于何时使用的最佳实践指南案例类 http en wikipedia org wiki Scala 28programming language 29 Case classes and pattern matching 或 case
  • Scala Spark:将数据框中的双列转换为日期时间列

    我正在尝试编写代码来将日期时间列 date 和 last updated date 转换为 mm dd yyyy 格式以进行显示 它们实际上是 unix 时间转换为双精度数 我该怎么做呢 import org joda time impor
  • 如何在不进行硬编码的情况下使用 Cake 模式进行依赖注入?

    我刚刚阅读并享受蛋糕图案文章 http jonasboner com real world scala dependency injection di 然而 在我看来 使用依赖项注入的关键原因之一是您可以改变 XML 文件或命令行参数所使用
  • 特征/类类型参数优先于方法类型参数的规则是什么

    我已经使用 scala 一段时间了 我认为我真的开始理解一切 好吧 大多数事情 但我发现自己对 Map 类中的许多方法定义感到困惑 我知道 FoldLeft 等如何工作 但我感到困惑的是 Map 函数中使用的类型参数 我们以 FoldLef
  • 如何在 Scala 中跳过可选参数?

    给定以下带有可选参数的函数 def foo a Int 1 b Int 2 c Int 3 我想保留默认值a但将新值传递给b and c仅通过位置赋值 而不是通过命名赋值 即以下任何语法都可以 foo 5 7 foo 5 7 Scala 可
  • JavaScript 中 Scala View 的等效项

    在斯卡拉中 view允许防止创建全新的集合 例如在Scala中 视图 有什么作用 https stackoverflow com questions 6799648 in scala what does view do JavaScript
  • 使用 Scala 在 Apache Spark 中拆分字符串

    我有一个数据集 其中包含以下格式的行 制表符分隔 Title lt t gt Text 现在对于每个单词Text 我想创建一个 Word Title 一对 例如 ABC Hello World gives me Hello ABC Worl

随机推荐

  • 在 node -v 14.3 中等待外部异步函数

    我读到14 3版本发布博客 https nodejs org en blog release v14 3 0 fbclid IwAR0uxEz48H9O8Ap0I7zt4OWF0Qyhrw6TpRpDLQRNOSpCD2o 0ASmu3UI
  • 如何使用 (Ruby) RGeo 转换(取消投影)坐标

    我开始于如何转换 Shapefile 的坐标 https stackoverflow com questions 6963991 how can i transform the coordinates of a shapefile 那里的回
  • 报告所有小于 n 的质数

    我需要打印所有小于给定数字 n 的素数 我可以使用埃拉托色尼筛 但该算法的运行时间不是 O n 这个问题有O n 时间的解决方案吗 埃拉托斯特尼筛法的时间复杂度为 O n log log n 函数 log log n 增长非常缓慢 例如 l
  • 如何在 .Net 应用程序中使用 IE 代理服务器设置及其凭据

    如何使用保存的代理设置和凭据作为 HttpWebRequests 的默认设置 代理设置可以访问和使用 但不能访问和使用凭据 IWebProxy proxy WebRequest GetSystemWebProxy proxy Credent
  • WinRT XAML 中的硬编码 PCH 名称

    WinRT 项目 C CX 当我的 XAML 文件被编译时 生成的代码文件包含一个 include pch h 线 我希望我的预编译器标头以不同的方式调用 stdafx h 出于遗留代码的原因 在项目属性中更改它会影响 C 源 但不会影响
  • 如何使用 DCMTK 二进制文件将模态工作列表发送到模态而不接收来自模态的查询?

    我正在使用 DCMTKstorescp exe 从 CR 模式接收图像 然后处理 将它们保存在我的数据库中 是否可以使用其他 DCMTK 二进制文件手动发送PatientName and PatientId在患者去那里之前进行 CR 模式
  • 如何模拟数据库进行测试(Java)?

    我正在使用 Java 进行编程 并且我的应用程序大量使用了数据库 因此 能够轻松测试我的数据库使用情况对我来说很重要 DB 测试都是关于哪些内容 对我来说 他们应该提供两个简单的要求 验证 SQL 语法 更重要的是 根据给定情况检查数据是否
  • 模板非类型参数,C++11,字符串文字限制

    模板非类型参数的限制规则如下 非类型 非模板模板参数的模板参数应为以下之一 对于整型或枚举类型的非类型模板参数 模板参数类型的转换常量表达式 5 19 或者 非类型模板参数的名称 或者 常量表达式 5 19 指定具有静态存储持续时间和外部或
  • 如何从尾部而不是头部拉出可变参数模板参数?

    由于愚蠢的原因 我不会进入这里 我需要注释掉的行才能工作 而其上面的行则不起作用 template
  • 在ios6中从iPhone相机捕获全景图像

    有没有办法使用 iPhone 相机以编程方式创建全景图像 就像iOS 6中的捕捉全景图像功能一样 知道它是如何工作的或者 API 这对我有帮助 提前致谢 如上所述 Apple 没有这方面的 API 但有开源全景项目 请查看这个问题 iOS
  • 有没有下载 ab Apache benchmark 的链接

    谁能给我直接下载 Ab exe Apache 基准测试实用程序吗 在 Ubuntu 上 我可以安装 ab 而无需通过 apache2 utils 软件包安装所有 Apache 所以 sudo apt get install apache2
  • 从远程仓库检索丢失的文件?

    我不小心从本地 git 存储库中删除了一些文件 我还没有将此更改推送到远程 有没有一种简单的方法可以从远程取回这些文件 通常我只会做一个git clone但似乎应该有更好的方法 git checkout 如何放弃 Git 中未暂存的更改 h
  • 如何正确使用 Spark -> Kafka -> JDBC Sink 连接器和 Avro?

    我有一个简单的 Spark 应用程序 通过以下方式生成 Kafka 消息 import org apache spark sql SparkSession import org apache spark sql functions col
  • 张量流中fft的结果与numpy不同

    我想在张量流中使用fft 但我发现分别在numpy和tensorflow中使用FFT函数时结果不同 特别是当输入数组的大小很大时 import tensorflow as tf import numpy as np aa tf lin sp
  • 如何使用一系列参数初始化结构体

    在许多语言中 常见的构造函数习惯用法是使用如下伪代码的语法来初始化对象的值 constructor Foo args for arg object arg arg Rust 乍一看似乎也不例外 许多impl for a struct包含一个
  • 如何删除 pandas、python 中某个对象的行?

    我的数据中有一个列包含这些类型的值 2 2 yes 2 yes 在 python pandas 中 我如何识别包含一串字母的整行 然后删除或删除整行 Thanks IIUC df df pd to numeric df col errors
  • 如何为 RESTful WCF 实现自定义 QueryStringConverter?

    我已经实现了一个自定义的 QueryStringConverter 类 并使用自定义的 WebHttpBehavior 子类将其连接起来 当我进行服务调用时 它会命中 CanConvert 覆盖中的断点 并且我为此参数返回 true 但它从
  • 没有主类的 Spring Boot

    我正在尝试使用 Spring Boot 并创建一个 jar 并将其安装到我的 Maven 存储库中 这是一个库 jar 文件 将在我的主应用程序 也是一个 Spring Boot 应用程序 中用作依赖项 现在 我正在研究一个 hello w
  • 将多个注释合并为一个以避免重复

    我正在使用 Spring MVC 来实现各种 REST 服务 对于文档 我使用 Swagger 这很好用 文档看起来不错 而且非常实用 我遇到的唯一问题是文档注释确实挤满了控制器类 尤其是错误代码注释 Example ApiErrors v
  • 是否存在 unapply 总是返回 Option 的规则?

    我尝试创建一个unapply模式匹配中使用的方法 我试图让它返回与Option但是 Eclipse 将其显示为错误 有没有这样的规定unapply必须返回一个Option T 编辑 这是我尝试使用的代码 我切换了上一节的代码 以便unapp