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"
当所需结果为Some(/Users/abc/git/abc-c2c/)/0.json
/Users/abc/git/abc-c2c/0.json
猜猜这是一些尚未理解的选择概念。 scala新手。
答案 0 :(得分:1)
正如您所指出的那样,您返回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
将指向String值:预期值(" get")或空字符串(" OrElse")。
答案 1 :(得分:0)
Map
上的Scala get
返回Option
。使用vJsonLoc(s)
代替vJsonLoc.get(s)