2016-06-17 2 views
-5

В настоящее время я пытаюсь читать себя в scala. Но я застрял на следующее:scala, get values ​​from Some (value)

val value: String = properties(j).attribute("value").toString 
print(value) 

Свойство XML считывается и преобразуется в строку, но получает рассматривается как «Some (значение)». Я пробовал несколько вещей, но никто не работает, когда я сам не создал значение с помощью опции «Option: String» (что было общим решением). Знает ли кто-нибудь простой способ избавиться от «Некоторые (»?

Привет Ма

+0

Что произойдет, если XML не имеет атрибута value? – Kolmar

+7

Это, вероятно, хорошо для вас, тип Option очень распространен в Scala, стоит ознакомиться с ним: http://danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to- Scala-часть-5-заместитель опционного type.html – alextsc

ответ

4

Нужное значение вызова метода ToString на это Option[String] типа, в отличие от простого String. Когда есть значение, вы получите Some(value), а если нет значения, вы получите None.

Из-за этого вам необходимо обработать два возможных случая, в которые вы можете вернуться. Обычно это делается с помощью матч:

val value: String = properties(j).attribute("value") match { 
    case None => ""//Or handle the lack of a value another way: throw an error, etc. 
    case Some(s: String) => s //return the string to set your value 
} 
0

Привет и спасибо за ввод. Я принял ваш код с небольшими изменениями, и это было довольно запутанно с переменными node.seq, String, Some(String), Some[A] в начале. В этой короткой версии он отлично работает:

val value = properties(j).attribute("value") match { 
       case None => "" 
       case Some(s) => s //return the string to set your value 
      }