Scala What is this "_1" in type? -


i understand error:

found   : row.type (with underlying type _#tableelementtype) required: _1#tableelementtype 

looks close, "1" in _1#tableelementtype? can convert 1 in other?

edit: useful bits of codes context (play + slick):

abstract class genericdao[t <: abstracttable[_]](...) {   def table: tablequery[t]   def insert(model: t#tableelementtype) = db run (table += model) }  trait tableobject[t <: abstracttable[_]] {   def rowfromjson(jsobject: jsobject): t#tableelementtype   def dao(driver: jdbcprofile, db: database): genericdao[t] }  // controller action instance implementing `tableobject` above: val tableobject = tableobjectfactory("test") val row = tableobject.rowfromjson(request.body.asjson.get) val dao = tableobject.dao(driver, db)  // tableobject has doa extending genericdao dao.insert(row) 

example of tableobject:

object testtable extends tableobject[test] {   def dao(driver: jdbcprofile, db: database) = new testdao(driver, db)   def rowfromjson(j: jsobject): testrow = { testrow(...) }   class testdao(...) extends genericdao[test](driver, db) { ... } } 

i use factory right 1 url:

object tableobjectfactory {   def tableobjectfactory(name: string) = {     name match {       case "test" => testtable       case "projects" => projectstable       case "people" => peopletable       ...     }   } } 

although doesn't explain much, works if make dao parse request body , insert, instead of producing row object separately , applying 1 of dao's methods on it.

i got kinds of similar errors names such _$1#tableelementtype, _1$u#tableelementtype etc., think compiler aliases different instances of same class.

so solution do

val j: jsvalue = request.body.asjson.get val tableobject: tableobject[_] = tableobjectfactory(table) val dao = tableobject.dao(driver, db) val res: future[int] = dao.insert(j) 

where new insert method abstract in genericdao, , in concrete implementations takes jsvalue , parses it, inserts:

class testdao(override val driver: jdbcprofile, override val db: database) extends genericdao[test](driver, db) {   import this.driver.api._    val table = tablequery[test]    //def insert(model: testrow) = db run (table += model)   // no!    def insert(j: jsvalue): future[int] = {     val row = testrow(       (j \ "id").as[int],       (j \ "name").as[string],       (j \ "value").as[float],       (j \ "other").as[string]     )     db run (table += row)   } } 

at same time, makes play forms useless, thing anyway.


Comments

Popular posts from this blog

php - How to add and update images or image url in Volusion using Volusion API -

javascript - jQuery UI Splitter/Resizable for unlimited amount of columns -

javascript - IE9 error '$'is not defined -