我试图掌握
org.apache.spark.sql.catalyst.trees.TreeNode
类的Spark 2.0.0源代码,但发现产品部分很有趣。
定义开始于
abstract class TreeNode[BaseType <: TreeNode[BaseType]] extends Product {
然后我检查了trait Product
,不知道TreeNode
如何了解ProductArity
或ProductElement
trait Product
需要哪种方法的统计数据。
我搜索了一段时间,发现有人指出 scala 编译器会找出case class
的这些统计数据,但TreeNode
不是案例类,我找不到一些协议或提示,Product
可以从实现类中获得所需的数字,例如ProductArity
返回。
那么有谁知道黑魔法的背后是什么?
TreeNode 不是一个案例类
但是每个扩展TreeNode
的非抽象类都是。也可能有手动实现productArity
和productElement
的非案例类,但我认为 Spark 中没有任何类。