首页 > 解决方案 > Product.scala trait 中 productPrefix def 的实际使用

问题描述

也许是愚蠢的问题,但我找不到任何有用的解释。我已经阅读了文档,但我很困惑,也许一种用途是在某种程度上比较类型。有什么想法或实际例子吗?

块引用

派生类的 toString 方法中使用的字符串。实现可以覆盖此方法以在 toString 方法的结果前添加字符串前缀。返回:在默认实现中,空字符串 Blockquote

标签: scalagenericstypes

解决方案


元组(extend Product)打印如下:

(x1, ..., xN)
^                  opening parenthesis
 ^                 elements
   ^               commas
            ^      closing parenthesis

案例类(也扩展Product)打印如下:

CaseClassName(x1, ..., xN)
^^^^^^^^^^^^^                    class name
             ^                   opening parenthesis
              ^                  elements
                ^                commas
                         ^       closing parenthesis

由于两者都继承自,因此可以在-traitProduct中提供一次默认toString实现,这会产生如下内容:Product

${productPrefix}(x1, ..., xN)   // ascii-art, not actual code

对于productPrefix = ""元组和productPrefix = "CaseClassName"案例类。

鉴于Tuples 是语言中不可或缺的一部分,我可以想象,使用从Producttrait 继承的方法实现可以在编译器开发的最早阶段达到“dogfooding”的实际目的:这实际上可能是一个s的第一个也是最简单的用法之一trait(这对我来说似乎有些合理,但这纯粹是推测性的;我并没有试图深入研究提交历史。)

否则,就没有更深层次的意义。这只是toString实施的一部分。你永远不应该依赖toString任何实现,也不应该将它用于任何类型的程序逻辑。


推荐阅读