2016-08-15 7 views
1

Я пытаюсь получить представление о классе Спарк 2.0.0 исходного кодаКак/где подклассы TreeNode реализуют связанные с продуктом методы?

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 есть. Также могут быть классы, не относящиеся к случаю, которые реализуют productArity и productElement вручную, но я не думаю, что они есть в Spark.

+0

yep Я все еще могу принять его: P. Еще одна вещь: в чем заключается намерение заставить «TreeNode» расширять «Продукт»? Если классы case наследуются, то можем ли мы создать «TreeNode» как «абстрактный класс case» или что-то в этом роде? – Dragonly

+0

Вы можете наследовать классы case, но это редко имеет смысл. И создание 'TreeNode'' абстрактного класса case' будет вести себя по-другому, чем нужно. –

Смежные вопросы