与小写变量名称匹配的 Scala 模式

2024-03-22

我发现当使用模式匹配与替代项(对于字符串)时,Scala 接受以大写字母开头的变量(在下面的示例中,MyValue1 and MyValue2),但不是以小写字母 (myValue1, myValue2)。这是 Scala 的错误还是功能?我在 2.8 版本中得到了这个。如果这是一个功能,任何人都可以解释其背后的基本原理吗?这是我使用的代码:

val myValue1 = "hello"
val myValue2 = "world"
val MyValue1 = "hello"
val MyValue2 = "world"

var x:String = "test"

x match {
  case MyValue1 | MyValue2 => println ("first match")
  case myValue1 | myValue2 => println ("second match")
}

运行时,我得到以下信息:

scala> val myValue1 = "hello"
myValue1: java.lang.String = hello

scala> val myValue2 = "world"
myValue2: java.lang.String = world

scala> val MyValue1 = "hello"
MyValue1: java.lang.String = hello

scala> val MyValue2 = "world"
MyValue2: java.lang.String = world

scala> var x:String = "test"
x: String = test

scala> x match {
 |   case MyValue1 | MyValue2 => println ("first match")
 |   case myValue1 | myValue2 => println ("second match")
 | }
<console>:11: error: illegal variable in pattern alternative
     case myValue1 | myValue2 => println ("second match")
          ^
<console>:11: error: illegal variable in pattern alternative
     case myValue1 | myValue2 => println ("second match")
                     ^

EDIT:

所以这确实是一个功能而不是一个错误......任何人都可以提供一个示例,当这可能有用时?

当我使用时:

x match {
   case myValue1 => println ("match")
   case _ => 
}

我得到一个unreachable code对最后一个案例发出警告,暗示第一个案例始终匹配。


这并不是特定于具有替代方案的模式,并且它不是一个错误。模式中以小写字母开头的标识符表示如果模式匹配则将绑定的新变量。

所以,你的例子相当于写:

x match {
   case MyValue1 | MyValue2 => println ("first match")
   case y | z => println ("second match")
}

您可以通过使用反引号来解决此问题:

x match {
   case MyValue1 | MyValue2 => println ("first match")
   case `myValue1` | `myValue2` => println ("second match")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与小写变量名称匹配的 Scala 模式 的相关文章

  • 如何在 Scala 中编写 Pig UDF

    我正在尝试在 Scala 中编写 Pig UDF 使用 Eclipse 我已将 pig jar 添加为 java 构建路径中的库 这似乎解决了以下 2 个导入问题 导入 org apache pig EvalFunc 导入 org apac
  • Spark - scala - 如何检查配置单元中是否存在表

    我必须使用 Spark 1 6 2 scala 检查配置单元中是否存在表 如果没有 我必须创建一个空数据框并将其保存为配置单元表 如果存在 则覆盖现有表 我需要一个返回布尔值的函数 基于该函数我可以做出上述决定 是否创建新表或覆盖现有表 1
  • 无法在 SBT 中运行 Apache Spark 相关单元测试 - NoClassDefFoundError

    我有一个简单的单元测试 使用SparkContext 我可以在 IntelliJ Idea 中运行单元测试 没有任何问题 但是 当尝试从 SBT shell 运行相同的测试时 我收到以下错误 java lang NoClassDefFoun
  • Scala REPL 中的递归重载语义 - JVM 语言

    使用 Scala 的命令行 REPL def foo x Int Unit def foo x String Unit println foo 2 gives error type mismatch found Int 2 required
  • 清理 IntelliJ 中构建的 Play 框架

    我有一个拼写错误conf routes文件导致 Play Framework 生成错误命名的类 重建项目并运行Invalidate Caches并没有解决 IntelliJ 中的问题 当我手动运行时重新生成了不正确的类文件play clea
  • 通用 scala 函数,其输入是变量数量的函数

    我想定义一个函数f需要另一个函数g 我们需要g采取采取n双打 对于某些固定n 并返回一个 Double 函数调用f g 应该返回具体值n 例如 f Math max 2因为 Math sin 具有类型 Double Double gt Do
  • 如何将模型结果保存到文本文件?

    我正在尝试将从模型生成的频繁项集保存到文本文件中 该代码是 Spark ML 库中 FPGrowth 示例的示例 Using saveAsTextFile直接在模型上写入 RDD 位置而不是实际值 import org apache spa
  • Scala 的代码覆盖率工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 高效序列化案例类

    对于我正在工作的图书馆 我需要提供一个高效 便捷 typesafe序列化 scala 类的方法 理想的情况是用户可以创建一个案例类 并且只要所有成员都是可序列化的 它似乎也应该如此 我准确地知道序列化和反序列化阶段的类型 因此不需要 也不能
  • Spark:如何使用crossJoin

    我有两个数据框 df1有 100000 行并且df2有 10000 行 我想创建一个df3这是两者的交叉连接 val df3 df1 crossJoin df2 这将产生 10 亿行 尝试在本地运行它 但似乎需要很长时间 您认为本地可以实现
  • Play框架:单属性案例类的JSON读取

    我正在尝试为包含单个属性的案例类创建隐式 JSON Reads 但收到错误 Reads Nothing 不符合预期类型 这是代码 import play api libs functional syntax import play api
  • 使用 Scala 获取 Spark 数据集中最新时间戳对应的行

    我对 Spark 和 Scala 比较陌生 我有一个具有以下格式的数据框 Col1 Col2 Col3 Col 4 Col 5 Col TS Col 7 1234 AAAA 1111 afsdf ewqre 1970 01 01 00 00
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • Scala中有类似Java Stream的“peek”操作吗?

    在Java中你可以调用peek x gt println x 在 Stream 上 它将对每个元素执行操作并返回原始流 这与 foreach 不同 foreach 是 Unit Scala 中是否有类似的东西 最好是适用于所有 Monady
  • Slick和bonecp:org.postgresql.util.PSQLException:FATAL:抱歉,太多客户端已经错误

    当我在本地开发应用程序时 我使用以下命令启动我的 play2 应用程序sbt run 我喜欢如何更改代码 然后重新加载浏览器以查看我的更改 在大约 10 次代码更改之后 我收到 postgresql 太多连接错误 见下文 我的数据库连接使用
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 具有继承类型的 Aux 模式推理失败

    我有一个复杂的玩具算法 我希望纯粹在类型级别上表示 根据饮食要求选择当天菜肴的修改 对卷积表示歉意 但我认为我们需要每一层才能达到我想要使用的最终界面 我的代码有一个问题 如果我们表达一个类型约束Aux 模式生成的类型基于另一个泛型类型 它
  • scala 提供类似 C++ 模板的东西吗?

    我来自 C 并试图了解 scala 的类型系统 考虑以下 C 模板类 template
  • 如何在 sbt 控制台中加载 scala 文件? [复制]

    这个问题在这里已经有答案了 可能的重复 将 Scala 文件加载到解释器中以使用函数 https stackoverflow com questions 7383436 load scala file into interpreter to
  • Akka-Http 2.4.9 抛出 java.lang.NoClassDefFoundError: akka/actor/ActorRefFactory 异常

    我正在尝试使用 Akka http 构建一个简单的 Web 服务 我遵循了这个指南 http doc akka io docs akka 2 4 9 scala http low level server side api html htt

随机推荐

  • 我可以根据时间更改背景颜色吗?

    我使用 html5 CSS bootstrap 创建了一个漂亮的网站 我想知道是否可以在白天 蓝色 和夜间 暗红色 期间在代码中自动更改背景颜色和导航栏选择颜色 我可以做些什么来根据用户的时间更改导航栏和背景的颜色吗 这是我的代码
  • C++:在小型项目的头文件中编写整个类的缺点?

    只是一个风格问题 我是一名独立工作的独立游戏开发者 我养成了在标题中编写整个类的 坏 习惯 我知道 h cpp 文件组合的一些好处是它们允许将代码分割成编译块 只要它们保持不变就不需要重新编译 并允许将接口与实现分开 然而 这些事情对我来说
  • Django-MPTT子页面的完整路径如何制作?

    我开始使用 Django MPTT 应用程序在我的 Django 站点页面上获取基于树的方法 对于前 我有带有子页面的页面 Trance 声音恍惚 子页 Hard Trance 子页面 Breaks Atmo Breaks 子页面 渐进式休
  • 创建独立于 bash 的进程

    我编写了一个程序来计算笔记本电脑中可用的电池电量 我还在程序中定义了一个阈值 每当电池电量低于阈值时 我想调用另一个进程 我使用了 system invoke o 其中 invoke o 是我必须运行的程序 我正在运行一个脚本 该脚本每 5
  • 在 zend 框架中运行控制器单元测试时出现“没有为此应用程序定义默认模块”异常

    我有一个具有默认目录结构的应用程序 对于没有自定义模块的应用程序 请参阅最后的结构图 我按照许多教程中的说明编写了一个 ControllerTestCase php 文件 并且还创建了相应的引导文件 再次参见最后的图 我已经编写了一些运行良
  • 处理双重间接时避免不兼容的指针警告

    假设这个程序 include
  • R 的 C API 中的 SEXP 数据类型到底是什么以及为什么使用它? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我知道关于 SEXP 的维基百科页面 并且我知道它代表符号表达 我 模糊地 知道 SEXP 是指 Lisp 中的树数据结构的符号 但我
  • 方向改变时 Activity 不断重新启动

    当屏幕旋转或用户在手机上滑动键盘时 如何防止活动重新启动 这可能吗 有解决办法吗 感谢所有相关答案 您可以通过在您的activity你的元素manifest xml 有问题的元素称为android configChanges 并且您需要注册
  • 上传错误:无法连接到 DataPusher。 ckan 2.4.3 中的错误

    我正在尝试将我的数据集上传到数据存储区 我创建数据集并尝试使用 ckan 界面中的 上传到数据存储 菜单将数据集上传到数据存储 我收到 上传错误 无法连接到 DataPusher Web 中的错误消息不在任何日志中 ckan 日志 data
  • 如何使用 RemoteViews 更新通知?

    我正在创建一个通知RemoteViews https d android com reference android widget RemoteViews从一个习惯Service 它在前台模式下以通知方式运行 也就是说 只要通知对用户可见
  • 根据另一列的相应行值创建行子集?

    让 CSV 包含两列 年龄 和 性别 其中 Age 30 24 55 61 70 21 Gender Male Female Male Male Male Female 我希望它向我显示与 Gender Male 相对应的所有 Age 值
  • R 从一个向量的最大值中提取 data.frame 的子集并按另一个向量分组[重复]

    这个问题在这里已经有答案了 gt ID lt c A A A B B B C C C C C gt WK lt c 1 2 3 1 2 3 1 2 3 4 5 gt NumSuccess lt c 0 0 2 0 0 1 0 0 0 0 3
  • 导出数组以在另一个 javascript 文件中使用

    在我的帖子请求中 我想检查是否thisString存在于另一个 javascript 文件数组中 Array js exports names John Mary Main js if names includes thisString d
  • jQuery UI 对话框关闭并没有清除对话框

    Using jQuery用户界面 http en wikipedia org wiki JQuery UI 我有一个选项卡插件 在选项卡 1 中加载了一个包含表格的页面 每行都有一个对话框的链接 一切正常 保存以下内容 对话框中有一个选项可
  • 在 Win32 程序中用 main() 函数替换 WinMain()

    我在 StackOverflow 和 Google 上进行了一些搜索 但没有找到答案 我想用这种类型的用户编程来启动我的应用程序 int main Window App Test 640 480 while App IsOpen Do th
  • JavaScript 变量作用域 [重复]

    这个问题在这里已经有答案了 我的一些 JavaScript 代码有问题 Script setTimeout function for var i 0 i lt 5 i setTimeout function console log i i
  • Swift 和变异结构

    当谈到 Swift 中的值类型变化时 我并不完全理解 正如 Swift 编程语言 iBook 中所述 默认情况下 无法从其实例方法中修改值类型的属性 为了使这成为可能 我们可以用mutating结构体和枚举中的关键字 我不完全清楚的是 您可
  • 如何使用 C# 以编程方式复制 MS SQL 2000 数据库?

    我需要使用 C VS 2005 将多个表从一个数据库复制到 SQL Server 2000 中的另一个数据库 该调用需要参数化 我需要能够传入我要将这些表复制到的数据库的名称 我可以使用带参数的 DTS 但我找不到任何从 C 执行此操作的示
  • 以 EXCEL 格式导出 HP Fortify SCA 4.10 结果

    我使用 HP Fortify SCA 4 10 进行扫描 现在我想将原始结果导出为 Excel 格式以进行数据处理以生成数据透视表 任何人都可以建议一个简单或困难的方法来做到这一点 引用此 url 获取 DB 脚本以获取 EXCEL 格式
  • 与小写变量名称匹配的 Scala 模式

    我发现当使用模式匹配与替代项 对于字符串 时 Scala 接受以大写字母开头的变量 在下面的示例中 MyValue1 and MyValue2 但不是以小写字母 myValue1 myValue2 这是 Scala 的错误还是功能 我在 2