我有一个Map
可能拥有相同类型的嵌套地图。这些嵌套地图中的每一个都有对外部地图的引用。
我已经定义了一个findValue
查看当前地图的方法,如果它没有找到任何东西,它会转到它的父级,依此类推,直到到达null
最外层的父级SymbolTable
。
我已将此行为放入 aTry
中,以便我可以匹配Success
and Failure
; 但是,为了避免出现 a-la 类型,Try[Try[Try[ ... Try[TableVaue]... ]]]
我将输出变平。
在尝试打电话时flatten
,我收到以下错误:Cannot prove that Object <:< Try[U]
以下是相关的代码:
class SymbolTable(val parentScope: SymbolTable) {
type TableValue = (TypeInfo, Option[Expression], Option[SymbolTable])
private val contents: mutable.Map[String, TableValue] = mutable.Map.empty
private def findValue(key: String): Try[TableValue] = Try {
if (contents contains key) contents(key)
else parentScope findValue key
}.flatten
}
所以我的问题是:如何在不对代码进行任何重大重构的情况下完成这项工作?