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()
提供参数。是否可能?
答案 0 :(得分:0)
以下代码应该完成您要执行的操作。我所做的改变是:
删除了matchTest的返回类型。 Scala会自动将返回类型推断为函数值。
替换方法定义" num"通过匿名函数。
修改了通配符模式匹配的签名,以返回与其他模式匹配一致的函数。 (这是一个黑客,我希望有人知道更好的方式)
您可以运行返回的匿名函数,如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")
}