我有一个看起来如下的方法:
def myMethod[T](klazz:Class[T]):Z
我想创建一个Int => () => Z
类型的地图,以便在我的代码中,我可以在地图上查看仅生成我需要的Z
。
但是,如果我执行以下操作:
Map( 0 -> myMethod(classOf[String]) _ , 1 -> myMethod(classOf[StringBuilder]))
我怎样才能避免写() => myMethod(classOf[String])
?
答案 0 :(得分:4)
为什么不简单地更改myMethod
以便它返回一个函数?
def myMethod( clazz: Class[_]): () => Z = {
{ () => /* put the body of the old myMethod here */ }
}
然后你可以这样做:
Map( 0 -> myMethod(classOf[String]) , 1 -> myMethod(classOf[StringBuilder]))
答案 1 :(得分:3)
另一种方法是使用自定义关联器:
implicit class LazyMapArrow[K](val self: K) extends AnyVal {
def ~>[V](other: => V): (K, () => V) = (self, () => other)
}