Scala中基于param的动态调用方法
我在斯卡拉上了贝娄的课Scala中基于param的动态调用方法,scala,Scala,我在斯卡拉上了贝娄的课 class A(arg:String){ // this method is going to call many time def exce():String ={ // i do not want to use if else here if("arg"=="a1") a1("abc") if("arg"=="a1") a2("abc") } def a1(arg1:String):String={ "in a1" } def a2(a
class A(arg:String){
// this method is going to call many time
def exce():String ={
// i do not want to use if else here
if("arg"=="a1")
a1("abc")
if("arg"=="a1")
a2("abc")
}
def a1(arg1:String):String={
"in a1"
}
def a2(arg1:String):String={
"in a2"
}
}
我现在将创建类A的实例,并将arg值作为方法名传递
如何调用方法“EXE”,EXE方法将根据参数调用a1或a2
喜欢
新的A(“a1”).EXE()--输出将是a1
如果不在“EXE”方法中使用if-else,如何实现这一点
如果我理解正确,有人能帮忙吗?我想这会解决您的用例:
class A(arg:String){
def exce():String = arg match{
case "a1"=>a1("abc")
case "a2"=>a2("abc")
}
def a1(arg1:String):String={
"in a1"
}
def a2(arg1:String):String={
"in a2"
}
}
现在,当您调用newa(“a1”).exec()时
然后它在a1中给出首先,您的方法a1、a2、exec
是公共的,但是为什么您想要像exec()->a1()或a2()这样的间接调用方式呢。我假设您没有将private添加到a1
和a2
。如果要多次调用exec
方法,则应将方法名称作为exec(名称:String)传递。这意味着如果要调用新方法,则必须创建新实例。模式匹配将是if else的替代方案
class A{
private def a1(arg1: String): String = {
"in a1"
}
private def a2(arg1: String): String = {
"in a2"
}
def exec(funName: String): String = {
funName match {
//You can think about passing input param "abc" from caller as well.
case "a1" => a1("abc")
case "a2" => a2("abc")
}
}
}
object Main extends App {
val a =new A()
println(a.exec("a1"))
println(a.exec("a2"))
}
结果:
在a1中
在a2中
或者,如果不希望将参数作为方法参数传递,则可以将参数设置为val
class A(val args:String){
// your a1,a2 methods goes here
def exec(): String = {
args match {
//You can think about passing input param "abc" from caller as well.
case "a1" => a1("abc")
case "a2" => a2("abc")
}
}
object Main extends App {
val a =new A("a1")
println(a.exec())
a.args = "a2"
println(a.exec())
}
结果:
在a1中
在a2中
这会有问题,但在这里,如果我调用100万次,它会在case语句中调用100万次,我在寻找它会有问题的东西,但在这里,如果我调用100万次,它会在case语句中调用100万次,我在寻找val obj=new A(“a1”)和obj.exe()现在exec应该在实例化类A时检测方法名,当我调用EXE 1000000次时,它已经知道需要调用哪个方法,并且不需要每次都去case