我们如何接受函数名作为用户输入?标准库中是否有任何成员如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)
答案 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.
...
编译器检查函数和方法调用的类型安全性。用户输入是运行时内容。编译时,运行时,两个人都应该相遇。