2011-09-26 9 views
6

posso passare una variabile come un parametro multivalore:scrittura letterale XML come parametro a Scala

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

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

Ma non riesco a passare un letterale XML come parametro multivalore:

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

Ma Posso passare un letterale XML come parametro semplice

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> 

?

Grazie

risposta

8

Aggiunta di uno spazio prima del elemento XML rende il lavoro:

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

Dal Scala Language Specification, punto 1.5:

Al fine di consentire l'inserimento letterale di frammenti XML, switch analisi lessicale da Modalità Scala alla modalità XML quando si incontra una parentesi angolare di apertura '<' nel seguente circostanza: Il’<’ deve essere preceduto sia da uno spazio, una parentesi aperta o un parentesi aperta e subito seguito da un carattere iniziale un nome XML

+0

Grazie, ho guardato nel paragrafo 10.1 :) –