gpt4 book ai didi

scala 关键字优先级

转载 作者:行者123 更新时间:2023-12-02 08:12:27 27 4
gpt4 key购买 nike

scala 中如何定义“关键字优先级”?

考虑这段代码:

for(i <- 1 to 10) yield i

这没关系,我得到一个从 1 到 10 的 Seq,但是当我尝试立即匹配时:

for(i <- 1 to 10) yield i match {case x => x.head}

出现编译错误:错误:值头不是 Int 的成员

我可以将 for ... yield 括在括号中以赋予其优先级:

{for(i <- 1 to 10) yield i} match {case x => x.head}

但我仍然想知道第二个示例代码是如何解释的。我希望第二个示例也能正常工作,而无需用括号括起来。

有人可以向我解释一下或者指出规范中正确的章节吗?

最佳答案

第二个例子解释为:

for(i <- 1 to 10) yield { i match {case x => x.head} } // won't compile

for 的大致语法如下:

for (Enumerators) yield Expr

由于 i match { case x => x.head } 解析为有效表达式( token 方面),因此编译器将如何看待它。因此,如果 Expr 看起来像一个表达式,那么它就会被处理。据此推理,以下陈述是有效的:

for(i <- 1 to 10) yield for(j <- 1 to 2) yield (i, j)
for(i <- 1 to 10) yield if (i % 2 == 0) 'a' else 'b'
for(i <- 1 to 10) yield try { 1 / (i - 5) } catch { case _ => }

它们都等价于

for(i <- 1 to 10) yield { for(j <- 1 to 2) yield (i, j) }
for(i <- 1 to 10) yield { if (i % 2 == 0) 'a' else 'b' }
for(i <- 1 to 10) yield { try { 1 / (i - 5) } catch { case _ => } }

注意:Scala 语言规范已发布 here (第一个链接)。相关部分位于 A 章(Scala 语法摘要)的第 161 页。

关于scala 关键字优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5051008/

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