【发布时间】:2016-02-02 21:18:34
【问题描述】:
我正在学习 Scala,我不得不说我真的很喜欢它。 我正在将我以前的 Java 项目移植到 Scala,尝试在我可以/知道如何使用该语言时利用该语言(主要是模式匹配并尝试使用 val,而不是递归或函数)。
在 java 项目中,我有一个 HashMap,它一开始是空的,并会通过使用某些方法来填充。然后,当然,我会使用hmap.get(key) 来检索对象。
这次我想使用不可变的HashMap,但我有点挣扎!这是我的代码:
val recipes = new HashMap[String,Any]()
private def addCrucibleRecipe(tag: String, tagAddon: String, result: ItemStack, cat: Any, aspects: AspectList) {
val recipe = new CrucibleRecipe(some params)
if(recipe.isInstanceOf[CrucibleRecipe]) recipes + (tag -> recipe)
else throw new IllegalArgumentException(tag + " is not a valid recipe!")
}
如您所见,我正在使用+ 运算符,它应该返回一个新的HashMap,其中包含以前的值和尾部的新值。
但是,当我调用recipes.get(key) 时,列表包含选项None。
这意味着我仍然指向旧的、空的HashMap。
我怎么能更新参考?也许这听起来很愚蠢,但我对函数式编程真的很陌生。它比可变的更好吗?
如果在 Scala 中有更实用或更有效的方法来做到这一点,请告诉我,我很想学习 :)
【问题讨论】:
标签: scala