由于函数是Scala中的对象,我想通过类参数初始化类方法 例如:
class myClass(functionsMap: Map[methodNameString,Function]){
def method1;
def method2;
}
我想通过此functionsMap
初始化此方法。
伪代码可以如下:
Map(
"method1" -> { x => x.size },
"method2" -> { () => println("hello") }
)
然后我想迭代这个地图并通过这个参数化的函数初始化方法 在课堂内如下:
class myClass(functionsMap: Map[methodNameString,Function]) {
def method1 = functionsMap("method1")
def method2 = functionsMap("method2")
}
有谁知道如何实施它?
答案 0 :(得分:4)
可以使用Dynamic trait:
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