私は、Spark 2.0.0のソースコードのTreeNodeサブクラスはどのようにProduct関連のメソッドを実装するのですか?
org.apache.spark.sql.catalyst.trees.TreeNode
クラスの把握を取得しようとしますが、製品の一部がおかしい見つけています。
abstract class TreeNode[BaseType <: TreeNode[BaseType]] extends Product {
が、私はtrait Product
を検査しTreeNode
がどの方法ProductArity
またはProductElement
trait Product
の必要性の統計を知ってもらうん方法を見つけ出すことができなかったとして
定義が開始されます。
私はしばらくの間、検索し、誰かがScalaのコンパイラはcase class
ためにそれらの統計情報を把握することを指摘見つけるが、TreeNode
はケースクラスではないと私はProduct
は実装から得ることができることを、いくつかのプロトコルやヒントを見つけることができませんクラスは、ProductArity
などの必要な番号を取得します。
誰もが黒い魔法の背後にあるものを知っていますか?
私はまだそれを受け入れることができます:P。もう一つ、 'TreeNode'が' Product'を拡張する意図は何ですか?ケースクラスが継承可能な場合、 'TreeNode'を' abstract case class'かそれに類するものに設計できますか? – Dragonly
ケースクラスから継承できますが、ほとんど意味をなさないことがあります。 'TreeNode'を'抽象クラス 'にすることは、望むものとはまったく異なった動作をします。 –