在Scala中将方法调用转换为()=>T函数

在Scala中将方法调用转换为()=>T函数,scala,Scala,我有一个如下所示的方法: def myMethod[T](klazz:Class[T]):Z 我想创建一个Int=>=>Z类型的映射,这样在我的代码中,我可以查看映射以只生成我需要的Z 但是,如果我执行以下操作: Map( 0 -> myMethod(classOf[String]) _ , 1 -> myMethod(classOf[StringBuilder])) 如何避免写入=>myMethodclassOf[String]?为什么不简单地更改myMethod,使其返回函数

我有一个如下所示的方法:

def myMethod[T](klazz:Class[T]):Z
我想创建一个Int=>=>Z类型的映射,这样在我的代码中,我可以查看映射以只生成我需要的Z

但是,如果我执行以下操作:

Map( 0 -> myMethod(classOf[String]) _ , 1 -> myMethod(classOf[StringBuilder]))
如何避免写入=>myMethodclassOf[String]?

为什么不简单地更改myMethod,使其返回函数

def myMethod( clazz: Class[_]): () => Z = {
  { () => /* put the body of the old myMethod here */ }
}
然后你可以做:

Map( 0 -> myMethod(classOf[String]) , 1 -> myMethod(classOf[StringBuilder]))
为什么不简单地更改myMethod以使其返回函数

def myMethod( clazz: Class[_]): () => Z = {
  { () => /* put the body of the old myMethod here */ }
}
然后你可以做:

Map( 0 -> myMethod(classOf[String]) , 1 -> myMethod(classOf[StringBuilder]))

另一种方法是使用自定义关联器:

implicit class LazyMapArrow[K](val self: K) extends AnyVal {
  def ~>[V](other: => V): (K, () => V) = (self, () => other)
}

另一种方法是使用自定义关联器:

implicit class LazyMapArrow[K](val self: K) extends AnyVal {
  def ~>[V](other: => V): (K, () => V) = (self, () => other)
}