2

由于函数是 Scala 中的对象,我想通过类参数初始化类方法,例如:

class myClass(functionsMap: Map[methodNameString,Function]){
      def method1;
      def method2;
}

我想通过 this 初始化这个方法functionsMap

伪代码可能如下:

Map(
  "method1" -> { x => x.size },
  "method2" -> { () => println("hello") }
)

然后我想遍历这个映射并通过类中的这个参数化函数初始化方法,如下所示:

class myClass(functionsMap: Map[methodNameString,Function]) {
      def method1 = functionsMap("method1")
      def method2 = functionsMap("method2")
}

有谁知道如何实现它?

4

1 回答 1

4

动态特征是可能的:

import scala.language.dynamics

class myClass(functionsMap: Map[ String, Function0[Unit]]) extends Dynamic {
  def selectDynamic(methodName: String) = { 
   println("I'm calling " + methodName) 
   functionsMap(methodName).apply()
  } 
}

scala> val funcs = Map("foo" -> (() => {println("I'm method passed outside")}))
// funcs: scala.collection.immutable.Map[String,() => Unit] = Map(foo -> <function0>)

scala> new myClass(funcs)
// res12: myClass = myClass@2d298123

scala> res12.foo
I'm calling foo
I'm method passed outside
于 2013-04-02T12:09:38.637 回答