如何在函数num()中传递参数?

时间:2016-08-24 11:18:26

标签: scala

object MatchTest4 extends App{

def matchTest(x: Any): Any = x match {

case 1 => def num(p: Int, q: Int): Unit = {
  val sum = p + q
  println(sum)
}

case 2 => def num(p: Int, q: Int): Unit = {
  val sub = p - q
  println(sub)
}

case 3 => def num(p: Int, q: Int): Unit = {
  val mul = p * q
  println(mul)
}

case 4 => def num(p: Int, q: Int): Unit = {
  val div = p / q
  println(div)
}

case _ => println("Invalid Choice")
}

println("Enter Your Choice")
val b= readInt()
println(matchTest(b))
}

现在我想给函数num()提供参数。是否可能?

1 个答案:

答案 0 :(得分:0)

以下代码应该完成您要执行的操作。我所做的改变是:

  1. 删除了matchTest的返回类型。 Scala会自动将返回类型推断为函数值。

  2. 替换方法定义" num"通过匿名函数。

  3. 修改了通配符模式匹配的签名,以返回与其他模式匹配一​​致的函数。 (这是一个黑客,我希望有人知道更好的方式)

  4. 您可以运行返回的匿名函数,如matchTest(4)(2,3)等。

    def matchTest(x: Any) = x match {
    
    case 1 => (p: Int, q: Int) => {
    
      val sum = p + q
    
      println(sum)
    
    }
    
    
    case 2 => (p: Int, q: Int) => {
    
      val sub = p - q
    
      println(sub)
    
    }
    
    case 3 => (p: Int, q: Int) => {
    
    
      val mul = p * q
    
    
      println(mul)
    
    
    }
    
    case 4 => (p: Int, q: Int) => {
    
      val div = p / q
    
      println(div)
    
    }
    case _ => println("Invalid Choice"); (a: Int, b: Int) =>  println("Invalid Choice")
    }