我必须向用户提供一些选项,例如:
1. Option 1
2. Option 2
Please choose your option:
在我的scala代码中,每个选项都有自己的方法与之关联。例如:
def method1(){
println("method1")
}
def method2(){
println("method2")
}
我不想使用switch语句,而是使用这样的地图结构:
val option= Console.readInt
val options= Map(1 -> method1, 2-> method2 )
然后我想调用相应的方法:
options.get(option).get
然而,当它到达 val options = Map(1 - > method1,2-> method2)这一行时,会打印以下内容:
method1
method2
你能告诉我完成这个的指示吗?
谢谢,
答案 0 :(得分:7)
您的方法可以使用或不使用括号来调用参数类型为()
的方法。只需编写方法名称即可解析为方法调用。要将函数作为将调用方法的值,您可以使用_
编写一个匿名函数作为()
参数的占位符:
method1 _
在您的示例中,这将是
val options = Map(1 -> method1 _, 2 -> method2 _)
options.get(option).get()
括号在这里是必要的。它们似乎不像get
方法那样。它们已应用于get
返回的函数对象。
另请注意,您可以使用等效代码map.get(key).get
替换map(key)
:
options(option)()
正如@tuxdna所指出的,如果option
不是options
地图中的某个键,则您的代码会抛出异常。避免这种情况的一种方法是对match
:
options.get()
options.get(option) match {
case Some(f) => f()
case None => // invalid option selected
}