gpt4 book ai didi

syntax - 在scala中解析嵌套元组的错误

转载 作者:行者123 更新时间:2023-12-01 09:07:37 24 4
gpt4 key购买 nike

在Scala中编写以下代码时

var m = Map((0,1) -> "a")
m += ((0,2), "b") // compilation error

我遇到了错误
type mismatch; found   : Int(0) required: (Int, Int)

However the changing the syntax of the tuple from (X,Y) to (X -> Y) works

var m = Map((0,1) -> 'a)
m += ((0,2) -> 'b) // compiles file

虽然
((0,1).getClass == (0 -> 1).getClass) // is true
(0,1).isInstanceOf[Tuple2[_,_]] && (0 -> 1).isInstanceOf[Tuple2[_,_]] // both true

这是为什么? Scala认为我的嵌套元组是什么?

最佳答案

原因很简单(我认为),并且与以下事实有关(就Map特性而言):

m += (a -> b)

是以下内容的简写:
m = m.+(t2) //where t2 is of type Tuple2[A,B]

显然,如果在第一个示例中使用逗号,Scala会将其解释为对该方法的调用:
m = m.+(a, b)

Map特性上,不存在此方法。方法调用规则意味着首先对 a -> b 求值(对 Tuple2),然后调用正确的方法。 注意:使用额外的一对括号就可以了:
m += ( (a,b) ) //works just fine but less readable

关于syntax - 在scala中解析嵌套元组的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1394689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com