为什么项目yield case class apply/unapply methods编译错误?
Why does the project yield case class apply/unapply methods compilation error?
在我的 Play Scala 项目中,我想将值插入到我的数据库中。为此,我将表单字段映射到 Controller
class 但在 Controller
class 中它显示 apply/unapply
方法是 not a member of object controllers
.
controllers/User.scala
package controllers
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import views._
import models._
object User extends Controller {
val userForm = Form(
mapping(
"username" -> nonEmptyText,
"emailid" -> text,
"password" -> nonEmptyText
)(User.apply)(User.unapply)
)
}
models/User.scala
package models
import play.api.db._
import anorm._
import anorm.SqlParser._
import play.api.Play.current
import scala.language.postfixOps
case class User (
username: String,
emailid: String,
password: String
)
object User {
val simple = {
get[String]("user.USER_NAME") ~
get[String]("user.EMAIL_ID") ~
get[String]("user.PASSWORD") map {
case username~emailid~password =>
User(username, emailid, password)
}
}
}
如果我 运行 activator compile
命令显示在下面 Exception
[error] D:\Test\app\controllers\User.scala:29: value a
pply is not a member of object controllers.User
[error] )(User.apply)(User.unapply)
[error] ^
[error] D:\Test\app\controllers\User.scala:29: value u
napply is not a member of object controllers.User
[error] )(User.apply)(User.unapply)
[error] ^
[error] two errors found
[error] (compile:compileIncremental) Compilation failed
[error] Total time: 25 s, completed Jun 3, 2015 5:44:05 PM
这是因为,即使它们在不同的包中,您的控制器和您的模型共享相同的名称,User
。
您必须通过指定包(例如 (models.User.apply)
)来消除歧义,正如 Mon Calamari 在评论中指出的那样。
但更重要的是,您应该将控制器重命名为 Users
以避免歧义。在Play Framework中,约定是将控制器名称复数化。
在我的 Play Scala 项目中,我想将值插入到我的数据库中。为此,我将表单字段映射到 Controller
class 但在 Controller
class 中它显示 apply/unapply
方法是 not a member of object controllers
.
controllers/User.scala
package controllers
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import views._
import models._
object User extends Controller {
val userForm = Form(
mapping(
"username" -> nonEmptyText,
"emailid" -> text,
"password" -> nonEmptyText
)(User.apply)(User.unapply)
)
}
models/User.scala
package models
import play.api.db._
import anorm._
import anorm.SqlParser._
import play.api.Play.current
import scala.language.postfixOps
case class User (
username: String,
emailid: String,
password: String
)
object User {
val simple = {
get[String]("user.USER_NAME") ~
get[String]("user.EMAIL_ID") ~
get[String]("user.PASSWORD") map {
case username~emailid~password =>
User(username, emailid, password)
}
}
}
如果我 运行 activator compile
命令显示在下面 Exception
[error] D:\Test\app\controllers\User.scala:29: value a
pply is not a member of object controllers.User
[error] )(User.apply)(User.unapply)
[error] ^
[error] D:\Test\app\controllers\User.scala:29: value u
napply is not a member of object controllers.User
[error] )(User.apply)(User.unapply)
[error] ^
[error] two errors found
[error] (compile:compileIncremental) Compilation failed
[error] Total time: 25 s, completed Jun 3, 2015 5:44:05 PM
这是因为,即使它们在不同的包中,您的控制器和您的模型共享相同的名称,User
。
您必须通过指定包(例如 (models.User.apply)
)来消除歧义,正如 Mon Calamari 在评论中指出的那样。
但更重要的是,您应该将控制器重命名为 Users
以避免歧义。在Play Framework中,约定是将控制器名称复数化。