我一直在努力处理以下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 }我无法编译这一点,因为在Erasure之后,这两个函数都是相同的,而且我不得不求助于糟糕的解决方法(比如curry1、curry2、curry12等等)。
错误:双重定义: def curryA, B, C, U:Map(B,c),U在第152行,def curryA, B, C, U:Map(A,C),U在第153行有相同的类型:(m: scala.collection.immutable.Map,a: Object)scala.collection.immutable.Map def curryA,B,C,U:Map(A,C),U= m.collect { case (a,bb,C),v)如果bb == b => (a,c) -> v}
有办法让这件事成功吗?可怕的情况允许可怕的解决方案(也就是反射和TypeTags?)
发布于 2020-02-17 06:55:29
解决办法:
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, dummy: Int = 0): Map[(A,C),U] = m.collect { case ((a,bb,c),v) if bb == b => (a,c) -> v }或者:
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)(implicit d: DummyImplicit): Map[(A,C),U] = m.collect { case ((a,bb,c),v) if bb == b => (a,c) -> v }https://stackoverflow.com/questions/60256871
复制相似问题