【发布时间】:2020-02-17 06:20:13
【问题描述】:
我一直在为以下 Scala 代码苦苦挣扎
def curry[A,B,C,U](m: Map[(A,B,C),U], a: A): Map[(B,C),U] = m.collect { case ((aa,b,c),v) if aa == a => (b,c) -> v }
def curry[A,B,C,U](m: Map[(A,B,C),U], b: B): Map[(A,C),U] = m.collect { case ((a,bb,c),v) if bb == b => (a,c) -> v }
我无法编译它,因为擦除后两个函数都是相同的,我不得不求助于糟糕的解决方法(如curry1、curry2、curry12 等)
错误:双重定义: def curry[A, B, C, U](m: Map[(A, B, C),U], a: A): Map[(B, C),U] 在第 152 行和 def curry[A, B, C, U](m: Map[(A, B, C),U], b: B): Map[(A, C),U] 在第 153 行 擦除后具有相同的类型: (m: scala.collection.immutable.Map, a: Object)scala.collection.immutable.Map def curry[A,B,C,U](m: Map[(A,B,C),U], b: B): Map[(A,C),U] = m.collect { case (( a,bb,c),v) 如果 bb == b => (a,c) -> v }
有没有办法让它工作?可怕的情况允许可怕的解决方案(也许是反射和 TypeTags?)
【问题讨论】:
标签: scala