gpt4 book ai didi

Scala 如何使用 Map 将方法存储为值

转载 作者:行者123 更新时间:2023-12-04 23:49:11 26 4
gpt4 key购买 nike

我必须向用户提供一些选项,例如:

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

你能告诉我完成这个的方向吗?

谢谢,

最佳答案

您的方法,其参数类型为 () , 可以带或不带括号调用。只写方法名就被解析为方法调用。要获取将调用您的方法的函数作为值,您可以编写一个带有 _ 的匿名函数。作为 () 的占位符争论:

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 中的键之一 map 。避免这种情况的一种方法是执行 match关于 options.get() 的结果:
options.get(option) match {
case Some(f) => f()
case None => // invalid option selected
}

关于Scala 如何使用 Map 将方法存储为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27052530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com