考虑以下地图,其值包含函数:
val mapOfFunctions: Map[Symbol, T => String] = ...
我可以颠倒函数的顺序和Map
:
val functionOfMap: (T) => Map[Symbol, String] = (t: T) => mapOfFunctions.mapValues(f => f(t))
问题是,如何写这个函数的逆。具体来说,填写以下功能:
def functionOfMapToMapOfFunction(fun: (T) => collection.Map[Symbol, String]): Map[Symbol, T => String] = {
// fill me out!
}
旁注:这里我假设functionOfMapToMapOfFunction
的输入是正确的(它们可以转换为MapOfFunctions
)
答案 0 :(得分:1)
T => Map[Symbol,String]
可能是任意函数。它可以返回带有0个元素的映射,或者带有10个元素或超过9999个元素的映射。并且您希望构建具有固定数量元素的完全定义的映射。所以,没办法。
但是如果你能以某种方式检索密钥集,那么从它构建Map
就没有问题。
def reverseMap(fun : T => Map[Symbol, String], keys : Set[Symbol]) : Map[Symbol, Option[String]] =
keys.map( k => (k, (t : T) => fun(t).get(k)) ).toMap