加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala toString:是否括号?

发布时间:2020-12-16 09:39:52 所属栏目:安全 来源:网络整理
导读:我希望这个线程可以是一些优点/缺点的摘要,用于覆盖和调用toString有或没有空的括号,因为这个东西有时会混淆我,即使我已经进入Scala了一段时间。 那么哪一个比另一个更好?来自Scala极客,官员和OCD偏执狂的评论受到高度评价。 优点toString: 乍看起来似
我希望这个线程可以是一些优点/缺点的摘要,用于覆盖和调用toString有或没有空的括号,因为这个东西有时会混淆我,即使我已经进入Scala了一段时间。

那么哪一个比另一个更好?来自Scala极客,官员和OCD偏执狂的评论受到高度评价。

优点toString:

乍看起来似乎是一个明显而自然的选择;
>大多数情况是微不足道的,只是构建Strings,而不会修改内部状态;
>另一个常见的情况是将方法调用委托给包装抽象:

override def toString = underlying.toString

优点to toring():

>绝对不是“accessor-like”的名字(这就是IntelliJ IDEA检查员一次抱怨的一切)
>可能意味着某些CPU或I / O工作(在每个System.arrayCopy调用计数对于性能至关重要的情况下);
>甚至可能意味着一些可变状态的变化(考虑一个例子,当第一个toString调用是昂贵的,所以它在内部缓存以产生更快的呼叫将来)。

那么最好的做法是什么?我还缺少什么吗?

更新:这个问题与每个JVM对象上定义的toString有关,所以我希望找到最佳实践(如果有的话)。

解决方法

以下是Scala中的Programming(10.3节)必须说的:

The recommended convention is to use a parameterless method whenever
there are no parameters and the method accesses mutable state only by
reading fields of the containing object (in particular,it does not
change mutable state). This convention supports the uniform access
principle,1 which says that client code should not be affected by a
decision to implement an attribute as a field or method.

这是(非官方)Scala Style Guide(第18页)必须说的:

Scala allows the omission of parentheses on methods of arity-0 (no
arguments):

reply() 
// is the same as 
reply

However,this syntax
should only be used when the method in question has no side-effects
(purely-functional). In other words,it would be acceptable to omit
parentheses when calling queue.size,but not when calling println().
This convention mirrors the method declaration convention given above.

后者没有提到统一准入原则。

如果您的toString方法可以实现为val,则意味着该字段是不可变的。但是,如果您的类是可变的,那么toString可能并不总是产生相同的结果(例如StringBuffer)。所以在Scala中的编程意味着我们应该在两种不同的情况下使用toString():

1)当它的值是可变的

2)有副作用

就个人而言,我认为忽略第一个更常见,更一致。在实践中,String几乎不会有副作用。所以(除非它),总是使用toString并忽略统一访问原则(遵循风格指南):保留括号表示副作用,而不是可变性。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读