Я работаю с scalax
, чтобы сгенерировать график моих операций Spark. Итак, у меня есть пользовательская библиотека, которая генерирует мой график. Итак, позвольте мне показать пример:
val DAGWithoutGet = createGraphFromOps(ops)
val DAGWithGet = createGraphFromOps(ops).get
Тип возврата DAGWithoutGet
равен
scala.util.Try[scalax.collection.Graph[typeA, scalax.collection.GraphEdge.DiEdge]]
,
, а для DAGWithGet
равен scalax.collection.Graph[typeA, scalax.collection.GraphEdge.DiEdge]
.
Здесь typeA
- это класс, связанный с проектом, представляющий одну операцию Spark, не относящуюся к контексту этого вопроса. (только для контекста: моя пользовательская библиотека, по сути, генерирует карту зависимостей между этими операциями, создает большой объект Map и вызывает Graph(myBigMap: _*)
для генерации графа).
Насколько я знаете, вызов команды .get
в этой точке моего кода или позже не должен иметь никакого значения, но это не то, что я вижу. Вызов DAGWithoutGet.get.nodes
имеет тип возврата scalax.collection.Graph[typeA,DiEdge]#NodeSetT
, а вызов DAGWithGet.nodes
возвращает DAGWithGet.NodeSetT
.
Когда я извлекаю один из этих узлов (используя метод .find
), я получаю типы scalax.collection.Graph[typeA,DiEdge]#NodeT
и DAGWithGet.NodeT
соответственно. К моему большому разочарованию, даже методы, доступные в каждом случае, различны - я не могу использовать pathTo
(что получается, то, что я хочу) или withSubgraph
на первом, только на последнем.
My Таким образом, после этого относительно сложного примера возникает сомнение: что здесь происходит? Почему извлечение значения из конструкции Try
в разные моменты приводит к разным типам, один путь зависит, а другой нет - или, если это не правильно, что я могу здесь упустить?