gpt4 book ai didi

Scala - 中缀与点表示法

转载 作者:行者123 更新时间:2023-12-03 07:32:45 25 4
gpt4 key购买 nike

是否存在一种优于另一种的最佳实践?我一直在阅读 Odersky 等人写的 Scala 书。似乎中缀用于许多 Collections API 函数,而点是为程序员定义的函数保留的。

最佳答案

我个人对此没有任何硬性规定,但我倾向于仅对符号方法名称使用中缀表示法,对字母数字方法名称使用点表示法。

中缀表示法使得以后修改代码变得很麻烦。以下是一些示例。

假设您有这行代码:

xs filter { f } map { g }

假设在稍后的某个时间点您需要在末尾添加一个 toList 。你这样说:

xs filter { f } map { g } toList

这可能会导致分号推断问题。为了避免这些问题,您可以在末尾添加分号,或者添加新行。在我看来,这两种选择都很丑陋。为了避免所有这些废话,我更喜欢使用 xs.filter(f).map(g)。使用这种语法重构总是更容易。

另一个例子:假设我的代码中有以下内容:

if(foo contains bar) { ..

比如说,我需要否定这个条件。如果我修改如下:

if(!foo contains bar) { ..

真糟糕。它被解析为 (!foo).contains(bar)。这不是我们想要的。

或者假设您需要另外添加一个新条件,然后将其修改为:

if(foo contains bar && cond) { ..

又是一个无赖。它被解析为 foo.contains(bar.&&(cond)) 。这又不是我们想要的。

当然,您可以在周围添加一堆括号,但与点符号相比,这会很难看并且难以阅读/编辑。

现在,我上面所说的所有内容也适用于符号方法名称。然而,符号方法在与点语法一起使用时看起来不自然,因此我更喜欢使用中缀语法。

<小时/>

上述准则的一个异常(exception):内部 DSL。它们通常经过精心设计,以免按照文档/示例中规定的方式(通常使用中缀表示法)编写时导致解析问题。

关于Scala - 中缀与点表示法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10233227/

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