在Scala中创建一个Map String – > Function
发布时间:2020-12-16 18:48:45 所属栏目:安全 来源:网络整理
导读:我需要将字符串映射到函数.我尝试了以下方法: def a(a: Int,..) = ... 表示具有各种参数的泛型函数, 然后 val m: Map[String,Funcs] = Map("a"- a) 哪里 type Funcs = (Any*) = Any 但它确实不起作用..我想用字符串作为键来制作混合函数的映射. 解决方法 这
我需要将字符串映射到函数.我尝试了以下方法:
def a(a: Int,..) = ... 表示具有各种参数的泛型函数, 然后 val m: Map[String,Funcs] = Map("a"-> a) 哪里 type Funcs = (Any*) => Any 但它确实不起作用..我想用字符串作为键来制作混合函数的映射. 解决方法
这并不容易.事实上,在运行时几乎不可能做到这一点.在编译时,你可以使用几个技巧,所有这些都可以在库
Shapeless中找到.你不必使用Shapeless作为
Miles showed in a gist,其中他解释说:
trait Assoc[K] { type V ; val value: V } def mkAssoc[V0](k: String,v: V0): Assoc[k.type] { type V = V0 } = new Assoc[k.type]{ type V = V0 } 现在在编译时你可以匹配你需要的所有不同的东西 implicit def fAssoc = mkAssoc("f",f) implicit def gAssoc = mkAssoc("g",g) 并将它们检索为 def lookup(k: String)(implicit assoc: Assoc[k.type]): assoc.V = assoc.value 如果你把这些推到像他用HMap完成的课程中,你可以按照Poly1的方式做一些事情: abstract class FMapper{ protected def mkAssoc[V0](k: String,v: V0): Assoc[k.type] { type V = V0 } = new Assoc[k.type]{ type V = V0 } def apply(k: String)(implicit assoc: Assoc[k.type]): assoc.V = assoc.value 并创建一个类,如 class Mapped extends FMapper{ implicit val f = mkAssoc("f",f) implicit val g = mkAssoc("g",g) 但正如你所看到的,它开始变得丑陋…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 关闭NG-Bootstrap carousel 的箭头按钮和指示器
- angularjs – Dragula angle如何访问模型项目
- angularjs – typescript:import jspm libraries
- Hacking with Angular:如何在深层嵌套ngRepeat中获取不同层
- 【数据结构】 二叉树的实现
- 当bash函数具有相同名称时调用程序
- angular – ionic 4 google-maps 5 beta“TypeError:无法读
- 使用bootstrap响应式需注意的9个问题
- Bash – 测试一个字符串是否比另一个字符串“更大” – 它在
- 读取文本文件以填充bash中的数组