OMG So, as -> begins with "-" then it has the precedence of the operator -????
On Sep 8, 7:52 pm, Naftoli Gugenheim <naftoli...@gmail.com> wrote: > Precedence is determined by the first character of an operator. > > ------------------------------------- > > Ross Mellgren<dri...@gmail.com> wrote: > > Because the compiler interpret your expression as you expect. Instead > of: > > "url_enlace" -> ("/product/" + product.id.toString) > > which is what you wanted, it got: > > ("url_enlace" -> "/product/") + product.id.toString) > > which it can do because it can take an arbitrary object: > > ("url_enlace" -> "/product/"): ABindParam > or (the other implicit ->) > ("url_enlace" -> "/product/"): Tuple2[String, String] > > and convert them to strings. Of course, once it converts to string, it > won't fit in bind()'s argument list and so it gave you the could not > find overload error. > > Honestly I'm a bit fuzzy on Scala's operator precedence behavior, I > think if I recall you can't set precedence, it comes pre-set on all > the standard operators like + / -, etc. > > -Ross > > On Sep 8, 2009, at 3:42 PM, José María wrote: > > > > > It worked when I put the () around the bind param!!!! > > > and the question is ... why? > > > On Sep 8, 7:35 pm, Ross Mellgren <dri...@gmail.com> wrote: > >> So that doesn't seem to be a box-related thing so much as a bind > >> argument related thing, probably because you have a precedence > >> problem... try: > > >> producto.map(product => > >> bind("product", xhtml, > >> "url_enlace" -> ("/product/" + product.id.toString), > >> ) > >> ).openOr(NodeSeq.Empty) > > >> Also, FYI, you have val product = Product.find(id), but then map over > >> producto. I presume either producto is coming from somewhere else > >> (and > >> val product is being shadowed inside the map) or that you pasted not > >> exactly what you're compiling. > > >> -Ross > > >> On Sep 8, 2009, at 3:25 PM, José María wrote: > > >>> That's my code: > > >>> val product = Product.find(id) > > >>> producto.map(product => > >>> bind("product", xhtml, > >>> "url_enlace" --> "/product/" + product.id.toString , > >>> ) > >>> ).openOr(NodeSeq.Empty) > >>> } > > >>> and I get this error: > > >>> [INFO] use java command with args in file forced : false > >>> /usr/home/josemaria/src/lift/helloworld/src/main/scala/demo/ > >>> helloworld/ > >>> snippet/Portada.scala:55: error: overloaded method value bind with > >>> alternatives (String,net.liftweb.util.Box[(scala.xml.NodeSeq) => > >>> scala.xml.NodeSeq],net.liftweb.util.Box > >>> [(scala.xml.PrefixedAttribute) > >>> => > >>> scala.xml.MetaData > >>> ],scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*) > >>> scala.xml.NodeSeq <and> > >>> (String,scala.xml.NodeSeq,net.liftweb.util.Helpers.BindParam*) > >>> scala.xml.NodeSeq cannot be applied to > >>> (java.lang.String > >>> ,scala.xml.NodeSeq > >>> ,java.lang.String > >>> ,java.lang.String > >>> ,net.liftweb.util.Helpers.BindParam > >>> ,net.liftweb.util.Helpers.BindParam) > >>> bind("producto", xhtml, > >>> ^ > >>> one error found > > >>> What's wrong? > > >>> On Sep 8, 7:13 pm, Ross Mellgren <dri...@gmail.com> wrote: > >>>> Well it depends on precisely what you want. If you want your > >>>> snippet > >>>> to become empty if the product is not there, try: > > >>>> productBox.map(product => { > >>>> bind("product", ns, ...) > > >>>> }).openOr(NodeSeq.Empty) > > >>>> If you want only certain bind positions empty, do the same thing > >>>> inside the bind: > > >>>> bind("proudct", ns, > >>>> "field" -> productBox.map(p => Text(p.field.toString)).openOr > >>>> (NodeSeq.Empty), > >>>> ...) > > >>>> map is of course just one of the (simpler) operations you can do > >>>> with > >>>> a Box, there's more complicated stuff if you need other variants. > > >>>> -Ross > > >>>> On Sep 8, 2009, at 3:06 PM, José María wrote: > > >>>>> Hi. > > >>>>> Boxes are giving me a hard time. > > >>>>> Say you have a model of a Product. > > >>>>> If I've a snippet that retrieves a Product from the DB: > > >>>>> val product : Box[Product] = Product.find(2) > > >>>>> And now I want to bind "product" with bind(), product is a Box > >>>>> and it > >>>>> can be empty, how can I bind something that doesn't exists? You > >>>>> have > >>>>> to return a NodeSeq in a snippet. What should my code must do? > > >>>>> Best regards. > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---