同じタイプのネストされたマップを持つMap
可能性がある があります。これらのネストされた各マップには、外側のマップへの参照があります。
現在のマップを調べるメソッドを定義しました。findValue
何も見つからない場合はその親に移動しnull
、最も外側の の親に到達するまで続けSymbolTable
ます。
と;Try
で一致させることができるように、この動作を に入れました。ただし、型が a-laになるのを避けるために、出力を平坦化します。Success
Failure
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
}
私の質問は次のとおりです。コードを大幅にリファクタリングせずにこれを機能させるにはどうすればよいですか?