Я пытаюсь получить представление о классе Спарк 2.0.0 исходного кодаКак/где подклассы TreeNode реализуют связанные с продуктом методы?
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
.
Значит, кто-нибудь знает, что стоит за черной магией?
yep Я все еще могу принять его: P. Еще одна вещь: в чем заключается намерение заставить «TreeNode» расширять «Продукт»? Если классы case наследуются, то можем ли мы создать «TreeNode» как «абстрактный класс case» или что-то в этом роде? – Dragonly
Вы можете наследовать классы case, но это редко имеет смысл. И создание 'TreeNode'' абстрактного класса case' будет вести себя по-другому, чем нужно. –