Потеря зависимого от пути типа при извлечении значения из Try в scala - PullRequest
1 голос
/ 24 марта 2020

Я работаю с 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 в разные моменты приводит к разным типам, один путь зависит, а другой нет - или, если это не правильно, что я могу здесь упустить?

...