Scala Map:神秘的语法糖?

发布于 2024-07-16 05:32:18 字数 298 浏览 11 评论 0原文

我刚刚发现了 scala Map 的语法(这里以可变形式使用)

val m = scala.collection.mutable.Map[String, Int]()
m("Hello") = 5
println(m) //PRINTS Map(Hello -> 5)

现在我不确定这是否是语法内置于语言中,或者这里是否发生了更基本的事情,涉及映射扩展 PartialFunction 的事实。 有人能解释一下吗?

I have just found out this syntax for a scala Map (used here in mutable form)

val m = scala.collection.mutable.Map[String, Int]()
m("Hello") = 5
println(m) //PRINTS Map(Hello -> 5)

Now I'm not sure whether this is syntactic sugar built in to the language, or whether something more fundamental is going on here involving the fact that a map extends a PartialFunction. Could anyone explain?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

玻璃人 2024-07-23 05:32:18

如果你的意思是(如果你能更明确的话那就太好了)

m("Hello") = 5

这是

m.update("Hello", 5)

独立于 m 的语法糖。 这类似于

m("Hello")

which is 语法糖

m.apply("Hello")

(我正在阅读“Scala 中的编程”。)

If you mean (it would be nice if you could be more explicit)

m("Hello") = 5

that is intended syntactic sugar for

m.update("Hello", 5)

independent of what m is. This is analogous to

m("Hello")

which is syntactic sugar for

m.apply("Hello")

(I'm just reading "Programming in Scala".)

萌梦深 2024-07-23 05:32:18

@starblue是正确的。 请注意,您还可以使用 update 做一些相当有创意的事情,例如返回除分配值之外的其他值。 例如:

val a = Map(1 -> "one")      // an immutable Map[Int, String]
val b = a(2) = "two"
val c = b(5) = "five"
val d = c(1) = "uno"

d == Map(1 -> "uno", 2 -> "two", 5 -> "five")       // => true

这是有效的,因为 immutable.Map#update 返回新 Map 的实例。 对于受过 C 训练的人来说,这看起来有点奇怪,但你会习惯的。

@starblue is correct. Note that you can also do rather creative things with update such as returning values other than what was assigned. For example:

val a = Map(1 -> "one")      // an immutable Map[Int, String]
val b = a(2) = "two"
val c = b(5) = "five"
val d = c(1) = "uno"

d == Map(1 -> "uno", 2 -> "two", 5 -> "five")       // => true

This works because immutable.Map#update returns an instance of the new Map. It looks a little odd to the C-trained eye, but you get used to it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文