scala hashmap获取字符串值返回some()
val vJsonLoc = new HashMap[String, String]();
def getPrevJson(s:String) = vJsonLoc.get(s)
val previousFile = getPrevJson(s"/${site.toLowerCase}/$languagePath/$channel/v$v/$segment")
这返回
Some(/Users/abc/git/abc-c2c/)
试图追加字符串previousFile + "/" + index + ".json"
当期望的结果是/Users/abc/git/abc-c2c/0.json
时,结果是Some(/Users/abc/git/abc-c2c/)/0.json
/Users/abc/git/abc-c2c/0.json
猜猜这是一些没有理解的Option的概念。 Scala新手。
正如您所指出的,您将获得Option
类型,而不是对数据结构中包含的String
的直接引用。 这是一个非常标准的Scala练习,可以让您更好地处理数据结构中可能不存在期望值的情况。
例如,在Java中,这种类型的方法通常在存在时返回值,如果不存在则返回null
。 这意味着,但是,后续的代码可能会在null
值上运行,因此您需要进一步防范异常。
在Scala中,你会得到一个对象的引用,这个对象可能会或可能不会有你期望的值。 这是Option
类型,可以是Some
(在这种情况下,引用是可访问的)或None
(在这种情况下,您有几个处理它的选项)。
考虑你的代码:
val vJsonLoc = new HashMap[String, String]();
def getPrevJson(s:String) = vJsonLoc.get(s)
val previousFile = getPrevJson(s"/${site.toLowerCase}/$languagePath/$channel/v$v/$segment")
如果HashMap
返回String
,则您的previousFile
引用可以指向null
值或String
值。 您需要防范潜在的异常(Java中的常规练习)。
但是在Scala中, get
返回一个Option
类型,可以用多种方式处理:
val previousFile = getPrevJson("your_string").getOrElse("")
//or
val previousFile = getPrevJson("your_string") match {
case Some(ref) => ref
case None => ""
}
生成的参考previousFile
将指向一个字符串值:或者是期望值(“get”)或空字符串(“OrElse”)。
斯卡拉Map
上get
返回Option
。 使用vJsonLoc(s)
而不是vJsonLoc.get(s)
上一篇: scala hashmap get string value returns some()
下一篇: Getting a structural type with an anonymous class's methods from a macro