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