Написание литерала XML в качестве параметра в Scala - PullRequest
6 голосов
/ 26 сентября 2011

Я могу передать переменную как многозначный параметр:

scala> <b/>
res26: scala.xml.Elem = <b></b>

scala> Elem(null,"a",Null,TopScope,res26)
res27: scala.xml.Elem = <a><b></b></a>

Но я не могу передать XML-литерал как многозначный параметр:

scala> Elem(null,"a",Null,TopScope,<b/>)
<console>:12: error: not found: value <
Elem(null,"a",Null,TopScope,<b/>)

Но я могу передатьXML-литерал как простой параметр

scala> def bar(s:String,n:Elem) = s+n.toString
bar: (s: String, n: scala.xml.Elem)java.lang.String
scala> bar("super ", <a/>)
res30: java.lang.String = super <a></a>

?

Спасибо

1 Ответ

8 голосов
/ 26 сентября 2011

Добавление пробела до того, как элемент XML заставит его работать:

scala> Elem(null, "a", Null, TopScope, <b/>)
resN: scala.xml.Elem = <a><b></b></a>

Из Спецификации языка Scala , Раздел 1.5:

Чтобы разрешить буквальное включение фрагментов XML, лексический анализ переключается с Переход из режима Scala в режим XML при встрече с открывающей угловой скобкой ’<’ в Следующее обстоятельство: перед символом «’ »должен стоять пробел, скобка или открывающая фигурная скобка и сразу после нее начинается символ имя XML </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...