2016-08-15 3 views
1

私は、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またはProductElementtrait Productの必要性の統計を知ってもらうん方法を見つけ出すことができなかったとして

定義が開始されます。

私はしばらくの間、検索し、誰かがScalaのコンパイラはcase classためにそれらの統計情報を把握することを指摘見つけるが、TreeNodeはケースクラスではないと私はProductは実装から得ることができることを、いくつかのプロトコルやヒントを見つけることができませんクラスは、ProductArityなどの必要な番号を取得します。

誰もが黒い魔法の背後にあるものを知っていますか?

答えて

1

のTreeNodeはTreeNodeを拡張

しかし、すべての非抽象クラスの場合クラスさではありません。 productArityproductElementを手作業で実装しているケースクラスではないかもしれませんが、私はSparkには何もないと思います。

+0

私はまだそれを受け入れることができます:P。もう一つ、 'TreeNode'が' Product'を拡張する意図は何ですか?ケースクラスが継承可能な場合、 'TreeNode'を' abstract case class'かそれに類するものに設計できますか? – Dragonly

+0

ケースクラスから継承できますが、ほとんど意味をなさないことがあります。 'TreeNode'を'抽象クラス 'にすることは、望むものとはまったく異なった動作をします。 –

関連する問題