Scala:接受函数名称作为用户输入

时间:2018-01-25 05:01:35

标签: scala

我们如何接受函数名作为用户输入?标准库中是否有任何成员如readLine,readByte等解决了这个目的?

上下文:作为函数式编程的一部分,我需要将函数名称作为第一个参数传递,但不是硬编码,而是希望将其作为用户输入接受。

请建议。

以下是示例代码:

def square(x:Int):Int = x * x

def sum(f: Int => Int, a:Int, b:Int):Int ={
  if(a>b) 0 else f(a) + sum(f,a+1,b)
}

println("Enter the first number:")

var num1 = readInt()

println("Enter the second number:")

var num2 = readInt()

val ressum = sum(square,num1,num2)

1 个答案:

答案 0 :(得分:2)

用户输入为String。函数和方法名称不是。要从一个到另一个,你必须测试输入内容。

val result = usrInput match {
  case "foo" => foo()
  case "bar" => bar()
  case "baz" => baz()
  case _ => throw new Error(s"I don't know $usrInput")
}

这假设它们都具有相同的返回类型(并且返回的值是感兴趣的)。如果他们返回不同的类型,那么代码就会变得更复杂。

if (usrInput == "foo") {
  val fooRslt = foo()
  // do more "foo" stuff
} else if (usrInput == "bar") {
  val barRslt = bar()
  // etc. etc.
...

编译器检查函数和方法调用的类型安全性。用户输入是运行时内容。编译时,运行时,两个人都应该相遇。