元组参数声明和赋值的奇怪之处

2024-03-29

我可以按如下方式分配一个元组:

var (min, max) = (1, 2)

但我不能那么重新分配如下

(min, max) = (1, 3) //compiler error: ';' expected but '=' found

相反,我似乎必须这样做:

min = 1
max = 3

为什么后者有效而前者无效?


嗯,我想是因为它是这样指定的。

这,元组分配,是模式匹配的一个例子。我记得模式匹配发生在三个地方:

var PATTERN = ... // or val

for (PATTERN <- ...) ...

case PATTERN => ...

所以所有这些情况都有效:

val l = List((1,'a'), (2,'b'), (3,'c'))
var (n, c) = l(0)
for ((n, c) <- l) println(n+": "+c)
l(1) match {
  case (n, c) => println(n+": "+c)
}

现在,以最后一个例子为例,使用case。注意n and c在那个例子中是not相同n and c定义得更早一些。模式匹配会将值分配给new身份标识n and c,这将影响之前的范围定义case陈述。同样的事情也发生在for例如,没有改变n and c先前定义的。

现在,您想要发生的是覆盖以前的值,而不是为新标识符分配新值。这不是模式匹配的工作原理,这意味着要实现它需要一个全新的规则。由于 Scala 温和地促使人们走向不变性,我认为他们没有创建一个新规则来处理这个问题并不是没有道理的。

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

元组参数声明和赋值的奇怪之处 的相关文章

  • 如何询问 Scala 类型参数的所有实例化是否存在证据?

    给定皮亚诺数的以下类型级加法函数 sealed trait Nat class O extends Nat class S N lt Nat extends Nat type plus a lt Nat b lt Nat a match c
  • Spark Scala:按小时或分钟计算两列的 DateDiff

    我在数据框中有两个时间戳列 我想获取它们的分钟差异 或者小时差异 目前我可以通过四舍五入获得日差 val df2 df1 withColumn time datediff df1 ts1 df1 ts2 但是 当我查看文档页面时https
  • Spark:替换嵌套列中的空值

    我想更换所有n a以下数据框中的值unknown 它可以是scalar or complex nested column 如果它是一个StructField column我可以循环遍历列并替换n a using WithColumn 但我希
  • 如何在 Scala 中编写 Pig UDF

    我正在尝试在 Scala 中编写 Pig UDF 使用 Eclipse 我已将 pig jar 添加为 java 构建路径中的库 这似乎解决了以下 2 个导入问题 导入 org apache pig EvalFunc 导入 org apac
  • Python:是否可以向 Tuple 类添加新方法

    在Python中 是否可以向内置类添加新方法 例如Tuple 我想添加 2 个新方法 first 返回元组的第一个元素 second 返回一个没有第一个元素的新元组 例如 x 1 2 3 x first 1 x second 2 3 Tha
  • 如何在Python中完美地将单元素列表转换为元组? [复制]

    这个问题在这里已经有答案了 所以我正在尝试这样做 tuple 1 我期望的输出是 1 但是 我得到了这个 1 但如果我这样做 tuple 1 2 它工作完美 像这样 1 2 这太奇怪了 我不知道为什么元组函数会导致这个结果 请帮我解决它 这
  • 覆盖 Predef 的隐式转换

    我有多个返回 java lang Integer 的方法 然后使用 Scala 的 Predef 隐式转换将其隐式转换为 Int 下面是它的编写方式there https github com scala scala blob v2 11
  • Scala Function.tupled 和 Function.untupled 等效于变量 arity,或者使用元组调用变量 arity 函数

    昨晚我试图围绕接受和调用通用函数做一些事情 即类型在调用站点上已知 但可能因调用站点而异 因此定义应该是跨参数通用的 例如 假设我有一个函数f A B C gt Z 其实这样的还有很多fs 我事先不知道 所以我无法确定类型或数量A B C
  • 如何设计具有相互依赖的测试的 Specs2 数据库测试?

    有没有一些首选的方法来设计Specs2 http etorreborre github com specs2 测试 有很多测试取决于之前测试的结果 下面 您将找到我当前的测试套件 我不喜欢var位于测试片段之间 不过 它们是 需要的 因为某
  • Scala 中奇怪的类型不匹配

    我希望这个问题还没有在其他地方得到解答 在这里没有找到答案 在我的本地化系统中 我有一个名为 Language 的类 class Language val name String dict HashMap String String def
  • 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 和 Spark

    我正在尝试使用 Spark 和 Scala 来编译一个独立的应用程序 我不知道为什么会收到此错误 topicModel scala 2 expected but import found error import org apache sp
  • 该表达式的类型为 int,但此处与 unit 类型一起使用

    我试图在 F 中获得与此 vb net 代码完全相同的 非功能性的 Function FastPow ByVal num As Double ByVal exp As Integer As Double Dim res As Double
  • 如何比较表中最后一个和倒数第二个条目的值?

    我在 Oracle 中有一个名为quotes 的表 其中包含两列 date 和value 我想比较表中最后一个条目和倒数第二个条目的值 在此示例中 我想获取日期13 1 和 11 1在一行中以及每个日期的值之间的差异 10 5 5 报价表
  • Scala 中抛出异常,什么是“官方规则”

    我正在 Coursera 上学习 Scala 课程 我也开始阅读 Odersky 的 Scala 书 我经常听到的是 在函数式语言中抛出异常不是一个好主意 因为它破坏了控制流 并且我们通常返回一个失败或成功的 Either Scala 2
  • 如何从字符串列中提取数字?

    我的要求是从列中的评论列中检索订单号comment并且总是开始于R 订单号应作为新列添加到表中 输入数据 code id mode location status comment AS SD 101 Airways hyderabad D
  • 将 r 数据框中的列字符串转换为数字

    我有一个数据框 其中有一列字符串 如下所示 mydata lt c 1 356670 35 355030 1 356670 35 355030 1 356620 35 355890 1 356930 35 358660 1 357000 3
  • HashPartitioner 是如何工作的?

    我阅读了文档HashPartitioner http spark apache org docs 1 3 1 api java index html org apache spark HashPartitioner html 不幸的是 除了
  • 高效序列化案例类

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

随机推荐