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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |