中缀运算符的 Scala 匹配分解

2023-11-22

我试图理解的实施List在 Scala 中。特别是,我试图了解如何使用中缀运算符编写匹配表达式,例如:

a match {
  case Nil => "An empty list"
  case x :: Nil => "A list without a tail"
  case x :: xs => "A list with a tail"
}

匹配表达式如何被允许x :: xs而不是List(x, xs)?


杰伊·康拉德的回答几乎是正确的。重要的是某处有一个名为::它实现了unapply方法,返回类型Option[(A, List[A])]。因此:

object :: {
  def unapply[A](ls: List[A]): Option[(A, A)] = {
    if (ls.empty) None
    else Some((ls.head, ls.tail))
  }
}

// case objects get unapply for free
case object Nil extends List[Nothing]

如果是:: and List,这个对象恰好来自以下事实:::是一个案例类,它扩展了List特征。然而,正如上面的例子所示,它并没有have根本就是一个案例类。

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

中缀运算符的 Scala 匹配分解 的相关文章

  • 类型不匹配;发现:长 需要:Int

    我有一个应该返回 Long 的方法 但我收到一个错误 type mismatch found Long required Int 方法如下 def getRandom IMEI from Long to Long Long if from
  • 组合部分函数

    我有两个偏函数f and g 它们没有副作用并且执行速度快 将它们组合成另一个部分函数的最佳方法是什么h这样h isDefinedAt x iff f isDefinedAt x g isDefinedAt f x 如果h是一个返回一个函数
  • 这段代码中list[:]的含义是什么? [复制]

    这个问题在这里已经有答案了 这段代码来自Python的文档 我有点困惑 words cat window defenestrate for w in words if len w gt 6 words insert 0 w print wo
  • scala.concurrent.blocking - 它实际上做了什么?

    我花了一段时间学习 Scala 执行上下文 底层线程模型和并发性的主题 你能解释一下通过什么方式吗scala concurrent blocking 调整运行时行为 and 可以提高性能或避免死锁 如中所述scaladoc http www
  • scala 中的模拟案例类:Mockito

    在我的游戏应用程序中 我打算模拟一个案例类 我可以这样做 但它创建了一个所有成员变量都为空的对象 有没有办法创建案例类的模拟对象 以便该对象可以初始化一些成员 case class User name String address Stri
  • 为什么我可以使用 Scala REPL 中的 Java 库,但不能使用脚本中的 Java 库?

    我正在开发一个使用 Joda Time 的 Scala 脚本 直到今天 这一切都运行良好 不知怎的 有些东西发生了变化 它不再起作用了 这有效 scala cp lib Welcome to Scala version 2 9 1 fina
  • 为什么我不能将 Scala 的 Function1 隐式转换为 java.util.function.Function?

    我正在尝试创建 Scala Function1 到 java util function Function 的隐式转换 这是我的代码 object Java8ToScala extends App implicit def javaFunc
  • 从会话中读取数据时如何发出加特林捕获请求?

    根据加特林文档 http gatling io docs 2 1 7 session session api html 我可以在执行场景时使用会话属性 但是 每次我在场景中使用函数文字访问会话时 都会遇到以下异常 error java la
  • 在 scala 中保留推导的更高类型

    我有一个高阶类型 并致力于用它构建一些 DSL 我正在寻找一种方法来定义可以接受类型而无需显式指定此类型的函数 自我描述示例 class Wrap T val data T class DSL def doSomething T x Wra
  • 内存泄漏在哪里?

    我使用 InetAddress 来解析 IP 地址 但现在如果 IP 不可用 则需要存储主机名 所以我介绍了一个班级Host case class Host name String ip InetAddress import Host ad
  • 如何在列表的解析参数中解析列表(字符串)而不是列表(字符)?

    我在flask中使用flask restful 我的代码如下 from flask restful import Resource reqparse apilink parser reqparse RequestParser apilink
  • 手动排除sbt中的一些测试类

    我通常在 CI 中执行以下命令 清理更新编译测试发布 但是 我想从 sbt 命令行中排除 1 个 或几个 测试类 我怎样才能做到这一点 我不想更改我的代码以使用忽略等 两种可能的选择 test only See http www scala
  • 如何将整个列表分配给 pandas 数据帧的每一行

    我有一个数据框和一个列表 df pd DataFrame A 1 2 3 B 4 5 6 mylist 10 20 30 40 50 我希望有一个列表作为数据帧的每一行中的元素 如果我喜欢的话here https stackoverflow
  • Scala Sparkcollect_list() 与 array()

    有什么区别collect list and array 在 Spark 中使用 scala 我看到到处都有使用情况 但我不清楚用例来确定差异 尽管两者array https spark apache org docs latest api
  • 在Python中创建一个二维矩阵

    我创建了一个 6x5 二维数组 最初每个单元格中只有 None 然后 我读取一个文件 并在读取文件时用数据替换 None 我首先创建空数组 因为数据在我正在读取的文件中的顺序未定义 我的第一次尝试是这样做的 x None 5 6 这导致了一
  • Play框架:读取包含空值的Json

    我正在尝试在 Play Scala 程序中读取 Json 数据 Json 的某些字段可能包含空值 因此我定义 Reads 对象的方式如下 implicit val readObj Reads ApplyRequest JsPath a re
  • 将数字转换为英文字母列表

    我有下面的函数 它将数字输入转换为这些数字的部分翻译的单词输出 使用乘积和商 它将数字的单词表示相加 同时将数字分组 例如 number name 87969087 gt 87 million 969 thousand 87 number
  • Scala 中的 Apply 和 lambda

    我有下面的代码 scala gt val builder new StringBuilder foo bar baz builder StringBuilder foo bar baz scala gt 0 until 5 foreach
  • 向前和向后迭代

    我们有一个双端结构列表 例如LinkedList 我需要向前和向后迭代元素 例如 向前 4 次 然后向后 2 次 然后向前 5 次 在 C 中它将是 iter iter iter 在 Rust 中 我只看到 next and rev 这很不
  • 索引匹配不起作用

    对于下表 如果 A 列和 B 列都匹配 如何检索 C 列A 列 B 列 C 列城市 1 城市 10 本地城市 2 城市 21 远程城市 3 城市 1 远程城市 4 城市 2 本地 我尝试使用索引和匹配 但得到 N A Enter as an

随机推荐

  • Python sys.path 修改不起作用

    我正在尝试修改我的 Python 文件之一中的 sys path 以获得一些 模块搜索路径中的特定库目录 这可能不是最好的方法 但 如果我在 sys path 前面插入多个路径 我的脚本不会考虑将来导入的这些路径 如果我创建一个包含我需要的
  • 如何获取 Oracle SQL 查询中错误的位置?

    如何获取查询中错误的位置 我需要获取导致错误的查询字符串中的位置 例如sqlplus可以 SQL gt insert into tbl data values 12345 2 insert into tbl data values 1234
  • ASP.Net - 从包含数据绑定的标记调用方法

    我在 ASP NET 中有一个用 C 编写的用户控件 该用户控件在代码隐藏中有一个方法 定义如下 protected string GetGreeting string name if String IsNullOrEmpty name r
  • 如何查找数组中的重复值?

    我正在 SQLite 上工作 我编写了一个查询 它返回两个数组 ItemsArray 和 CustomersIDArray 如下所示 ItemsArray Element at Index 0 Off White Element at In
  • iOS - 更新到新版本时保留旧的 sqlite 数据库

    我发现了一些其他问题 但我没有清楚地知道如何在 ios 中更新应用程序时保留旧数据库中的数据 情况1 我可以保留旧数据库吗 如果情况 1 为 是 我可以插入新列或在旧数据库中进行任何更改吗 这安全吗 如果情况 1 为 否 我可以在新数据库中
  • 在 asp.net mvc 3 中预填充 Html.TextBoxFor

    我对此很陌生 所以如果这还不够解释的话 我很抱歉 我想在 asp net mvc 3 的表单中预填充一个字段 这可行 Html TextBox CompName null new value ViewBag CompName 但是当我想用一
  • Spring boot - 如何获取运行端口和IP地址[重复]

    这个问题在这里已经有答案了 我在启动 Spring Boot 应用程序时通过 shell 脚本传递端口 想知道如何获取应用程序中的运行端口和系统IP地址以打印在日志文件中 脚本 Dcom sun management jmxremote D
  • 免费的java 3d引擎[关闭]

    Closed 这个问题是无关 目前不接受答案 适用于 java 的最佳 3D 游戏引擎是什么 我正在寻找具有良好的视觉开发工具集的东西 我已经查看了维基百科上的可用列表 http en wikipedia org wiki List of
  • ggplot 增加箱线图之间的距离

    如何避免附加箱线图 谢谢 ggplot df aes x factor time y val fill ID geom boxplot scale fill manual values c WT goldenrod3 KO steelblu
  • 设置 char* 缓冲区并中间转换为 int*

    我无法完全理解我在这里读到的内容的后果 将 int 指针转换为 char ptr 反之亦然 简而言之 这行得通吗 set4Bytes unsigned char buffer const uint32 t MASK 0xffffffff i
  • 无法在 D3 JavaScript 库中获取点击事件

    我正在使用 D3 JavaScript 库将数据显示为力定向标记 效果很好 但我无法将点击事件添加到圈子中 因此 当我单击圆圈时 我会获得对该圆圈的详细分析并将其显示在模式框中 var links source x target y typ
  • 将生成的 PIL 图像保存到 django 中的 ImageField 中

    我在用qrcode生成二维码 当购买门票或购买真实时 我想生成一个二维码图像并使用 PIL 进行一些更改 最后将修改后的画布保存到模型的Image字段中 class Ticket models Model booked at models
  • Angular ui 模式与控制器位于单独的 js 文件中

    我正在尝试制作一个可以从应用程序中的多个位置实例化的模式 从这里给出的例子 Bootstrap 的 Angular 指令模态控制器与实例化模态的控制器位于同一文件中 我想将模态控制器与 应用程序 控制器分开 索引 html
  • Inno Setup 组件的详细描述

    我正在使用 Inno Setup 构建安装 并使用组件部分来允许最终用户选择要安装的可选项目 其中一些项目需要更长的描述 以便用户有足够的信息来智能地选择它们 有没有办法在某处添加更深入的描述 此解决方案仅使用正确的 Inno Setup
  • 为什么 Qt Creator 3.0.0 欢迎模式在 VM 中不起作用?

    我最初在我的 Win7 64 位机器上安装了 Qt 5 20 和 Qt Creator 3 0 它运行得很好 然后我想将其安装到Win7 32位虚拟机中 使用VirtualBox 在虚拟机中 我从 qt project org 网站开始并下
  • javascript更改获取参数而不重定向[重复]

    这个问题在这里已经有答案了 如何只更改 get 参数而不重定向 parent location search after 20 ok that changes but also redirect to the new page 有什么解决办
  • 如何使用 pip 卸载可编辑包(使用 -e 安装)

    我已经用 e 安装了一些软件包 gt pip install e git https github com eventray horus git 2ce62c802ef5237be1c6b1a91dbf115ec284a619 egg ho
  • 替代 MySQL 的 UUID 版本 1 功能?

    Context Web 应用程序 PHP 5 MySQL 5 0 91 问题 我最近从使用自动递增整数改为使用 UUID 作为某些表的主键 通过 MySQL 生成 UUID 时UUID 功能 它们彼此非常相似 uuid 1e5988da a
  • gfortran 傻瓜版: mcmodel=medium 到底是做什么的?

    我有一些代码在编译时出现重定位错误 下面是说明该问题的示例 program main common baz a b c real a b c b 0 0 call foo print b end subroutine foo common
  • 中缀运算符的 Scala 匹配分解

    我试图理解的实施List在 Scala 中 特别是 我试图了解如何使用中缀运算符编写匹配表达式 例如 a match case Nil gt An empty list case x Nil gt A list without a tail