加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:05:22 所属栏目:安全 来源:网络整理
导读:我必须向用户提供许多选项,例如: 1. Option 12. Option 2Please choose your option: 在我的scala代码中,每个选项都有自己的方法与之关联.例如: def method1(){ println("method1")}def method2(){ println("method2")} 我想使用这样的地图结构,而不是使用
我必须向用户提供许多选项,例如:

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 val options = Map(1 – > method1,2-> method2)时,它会打印以下内容:

method1
method2

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

谢谢,

解决方法

您的方法具有参数类型(),可以使用括号或不使用括号来调用.只需编写方法名称即可解析为方法调用.要将函数作为将调用方法的值,您可以使用_作为()参数的占位符来编写匿名函数:

method1 _

在你的例子中,这将是

val options = Map(1 -> method1 _,2 -> method2 _)
options.get(option).get()

括号在这里是必要的.他们不是为了方法获得它看起来像.它们应用于get返回的函数对象.

另请注意,您可以使用等效代码映射(键)替换map.get(key).get:

options(option)()

正如@tuxdna所指出的,如果option不是选项映射中的键之一,则代码将抛出异常.避免这种情况的一种方法是对options.get()的结果进行匹配:

options.get(option) match {
   case Some(f) => f()
   case None => // invalid option selected
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读