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”)。


斯卡拉Mapget返回Option 。 使用vJsonLoc(s)而不是vJsonLoc.get(s)

链接地址: http://www.djcxy.com/p/86201.html

上一篇: scala hashmap get string value returns some()

下一篇: Getting a structural type with an anonymous class's methods from a macro