gpt4 book ai didi

scala - 错误: left- and right-associative operators with same precedence may not be mixed

转载 作者:行者123 更新时间:2023-12-02 10:49:22 25 4
gpt4 key购买 nike

我正在尝试在Scala中创建URI DSL,但是infix方法确实给我带来了麻烦。

即使将冗长且非常不直观的优先规则提交到内存中,它们仍然给我带来麻烦。

class Foo {
def `://`(a: Unit) = this
def `:`(b: Unit) = this
}

object Foo {
def main(args: Array[String]): Unit = {
new Foo `://` {} `:` {}
}
}

产量
left- and right-associative operators with same precedence may not be mixed
new Foo `://` {} `:` {}

^

这是什么意思?我以为所有运算符都是左关联的。

有什么办法让我写一个像这样的DSL?
"https" `://` "example.com" `:` 80

最佳答案

The Scala Language Specification中,第6.12.3节:

The associativity of an operator is determined by the operator’s last character. Operators ending in a colon ‘:’ are right-associative. All other operators are left-associative



编译器不知道是否将您的代码解释为:
80.`:`("https".`://`("example.com"))

或这个:
"https".`://`(80.`:`("example.com"))

我认为没有办法防止':'被视为右关联运算符。您可以使用括号来帮助编译器。否则,您必须更改运算符(operator)名称。

关于scala - 错误: left- and right-associative operators with same precedence may not be mixed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29734946/

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