Scala:将函数的`Map`转换为`Map`s的函数

时间:2015-09-24 23:47:50

标签: scala

考虑以下地图,其值包含函数:

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

1 个答案:

答案 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