Scala arity-1调用后接arity-0调用的推荐样式
鉴于官方的Scala风格指南Scala arity-1调用后接arity-0调用的推荐样式,scala,Scala,鉴于官方的Scala风格指南 建议对arity-1调用使用中缀表示法,对arity-0调用使用点表示法。对于arity-1调用后接arity-0调用,建议使用什么样式 例如,这是推荐的方式吗 (bytes map (_.toChar)).mkString 我不知道这本指南是谁写的,但他显然有偏见,我建议不要遵循这本指南。中缀符号有很多陷阱,作者没有提到,它的好处至少是值得怀疑的。作者使用的论点也同样值得怀疑 作者认为,下面的代码使它看起来像是对函数(u.toUpperCase)调用的方法过滤
建议对arity-1调用使用中缀表示法,对arity-0调用使用点表示法。对于arity-1调用后接arity-0调用,建议使用什么样式 例如,这是推荐的方式吗
(bytes map (_.toChar)).mkString
我不知道这本指南是谁写的,但他显然有偏见,我建议不要遵循这本指南。中缀符号有很多陷阱,作者没有提到,它的好处至少是值得怀疑的。作者使用的论点也同样值得怀疑 作者认为,下面的代码使它看起来像是对函数
(u.toUpperCase)
调用的方法过滤器
:
但是没有人会这样格式化代码。以下是标准实践,它们都不会对此类行为产生歧义:
names.map(_.toUpperCase).filter(_.length > 5)
names.map( _.toUpperCase ).filter( _.length > 5 )
中缀符号的陷阱
最一致、最安全的标准是只对操作员使用中缀符号,即名称为
+
,*
,>=
的方法。我不知道这本指南是谁写的,但他显然似乎有偏见,我建议不要遵循这本指南。中缀符号有很多陷阱,作者没有提到,它的好处至少是值得怀疑的。作者使用的论点也同样值得怀疑
作者认为,下面的代码使它看起来像是对函数(u.toUpperCase)
调用的方法过滤器
:
但是没有人会这样格式化代码。以下是标准实践,它们都不会对此类行为产生歧义:
names.map(_.toUpperCase).filter(_.length > 5)
names.map( _.toUpperCase ).filter( _.length > 5 )
中缀符号的陷阱
最一致和最安全的标准是仅对运算符使用中缀符号,即名称为
+
,*
,>=
的方法。样式指南的摘要基本上是:只要简单明了,就使用无点样式。否则,不要。在这种情况下,您的选项是
bytes.map(_.toChar).mkString
(bytes map (_.toChar)).mkString
而前者在我看来更简单更清晰,所以它赢了
真正的长链在无点表示法中也不是很清楚
foo bar baz qux quux bippy
再说一遍
foo.bar(baz).qux(quux).bippy
哦,好的
要务实。无点风格可以干净优雅。好的编码风格通常会使您编写的代码看起来很好,而且没有点。但是语法的要点是要清楚并避免错误,所以使用更好的方法来达到目的。样式指南的总结基本上是:只要简单明了,就使用无点样式。否则,不要。在这种情况下,您的选项是
bytes.map(_.toChar).mkString
(bytes map (_.toChar)).mkString
而前者在我看来更简单更清晰,所以它赢了
真正的长链在无点表示法中也不是很清楚
foo bar baz qux quux bippy
再说一遍
foo.bar(baz).qux(quux).bippy
哦,好的
要务实。无点风格可以干净优雅。好的编码风格通常会使您编写的代码看起来很好,而且没有点。但是语法的要点是要清楚并避免错误,所以使用更好的方法来实现目标。我完全不同意你的选择。我发现不带“.”的
map
和不带“.”的filter
更具可读性。请告诉我这个“标准”在哪里?@wheaties这种可读性是以不一致性和潜在错误为代价的,我在回答的更新中描述了这一点。我提到的标准是我在Scala中处理的大多数代码中看到的标准。在大多数情况下,基本Scala库也遵循它。这很好,但我仍然不同意。这就是观点的有趣之处,不是吗P@wheaties嗯,我已经提出了论点,所以这不仅仅是一个观点。如果你提出了一些相反的论点,这会很有帮助,因为你不同意。Con 1是错误的,如果你用中缀运算符终止一行,你可以在下一行继续表达式。它在REPL中工作不好,但在编译代码或使用:paste
时没有问题。我完全不同意您的选择。我发现不带“.”的map
和不带“.”的filter
更具可读性。请让我看看这个“立场”