scala控制台
如果我们可以将其用于我们的游戏应用程序,您会怎么说?…在scala或JAVA中! 是的,随着制表符的完成和所有的钟声响起……
好吧,多亏了游戏开发团队的Peter Hausel( @ pk11 ),我才知道如何做到这一点 。
只需打开命令提示符并键入:
cd <path_to_your_play2_app>
play console
[info] Loading project definition from /home/sas/Dropbox/Public/devel/play/apps/play2/todo/project
[info] Set current project to todo (in build file:/home/sas/Dropbox/Public/devel/play/apps/play2/todo/)
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_31).
Type in expressions to have them evaluated.
Type :help for more information.
就这样,您就在scala控制台上,并且最好的是启用了制表符补全功能!
在这里,您可以开始使用scala以及应用程序进行游戏,如下所示:
scala> val contact = models.Contact(1, "new contact", "new address")
contact: models.Contact = Contact(1,new contact,new address)
您可以测试视图,当然也可以发布导入文件,以节省很多击键次数
scala> import models._, views.html._
import models._
import views.html._
scala> val contacts = Seq( Contact(1, "@develsas", "Buenos Aires"), Contact(2, "@pk11", "Paris") )
contacts: Seq[models.Contact] = List(Contact(1,@develsas,Buenos Aires), Contact(2,@pk11,Paris))
scala> contact.list(contacts)
res1: play.api.templates.Html =
<!DOCTYPE html>
<html>
<head>
<title>Contact list</title>
<link rel="styles
[...]
<tr>
<td>@develsas</td>
<td>Buenos Aires</td>
</tr>
<tr>
<td>@pk11</td>
<td>Paris</td>
</tr>
[...]
但是,当您尝试访问数据库时,会出现以下错误:
scala> val contacts = Contact.all()
java.lang.RuntimeException: There is no started application
at scala.sys.package$.error(package.scala:27)
[...]
这很容易,您只需要启动您的应用程序
scala> import play.core._
scala> new StaticApplication(new java.io.File("."))
[info] play - database [default] connected at jdbc:h2:data/db
[info] play - Application started (Prod)
res1: play.core.StaticApplication = play.core.StaticApplication@10cdd4
现在您可以与正在运行的应用程序进行交互
scala> val contacts = Contact.all
contacts: Seq[models.Contact] = List(Contact(1,Paul,Boston), Contact(3,Paolo,Roma), Contact(4,Paulain,Paris), Contact(5,Abelardo,San Justo))
scala> val newContact = Contact(6, "new contact", "new address")
newContact: models.Contact = Contact(6,new contact,new address)
scala> Contact.insert(newContact)
res2: Int = 1
scala> val contacts = Contact.all
contacts: Seq[models.Contact] = List(Contact(1,Paul,Boston), Contact(3,Paolo,Roma), Contact(4,Paulain,Paris), Contact(5,Abelardo,San Justo), Contact(6,new contact,new address))
现在检查您的数据库,您会看到新联系人已保留到您的数据库中。
最后一个提示。 如果您正在使用内存数据库,并且已定义任何演化脚本,则在启动应用程序表单播放控制台时会收到以下消息:
scala> new play.core.StaticApplication(new java.io.File("."))
[info] play - database [default] connected at jdbc:h2:mem:play
[warn] play - Your production database [default] needs evolutions!
# --- Rev:1,Ups - 74ff2d1
[...]
[warn] play - Run with -DapplyEvolutions.default=true if you want to run them automatically (be careful)
PlayException: Database 'default' needs evolution! [An SQL script need to be run on your database.]
at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:422)
[...]
解决方案非常简单,只需开始使用
play -DapplyEvolutions.default=true
启动应用程序时,您的演进脚本将自动应用。
继续尝试一下。 抓取例如计算机数据库Java演示
$ cd <path_to_your_play2_installation>/samples/java/computer-database
$ play -DapplyEvolutions.default=true
[computer-database] $ console
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.7.0_03).
Type in expressions to have them evaluated.
Type :help for more information.
scala> new play.core.StaticApplication(new java.io.File("."))
[info] play - database [default] connected at jdbc:h2:mem:play
[info] play - Application started (Prod)
res0: play.core.StaticApplication = play.core.StaticApplication@129796b
现在,开始使用您的应用程序
scala> val page = models.Computer.page(1, 10, "name", "asc", "")
page: com.avaje.ebean.Page[models.Computer] = com.avaje.ebeaninternal.server.query.LimitOffsetPage@d386c9
scala> val computerList = page.getList()
computerList: java.util.List[models.Computer] = BeanList size[10] hasMoreRows[true] list[models.Computer@137, models.Computer@20d, models.Computer@12e, models.Computer@1b7, models.Computer@12d, models.Computer@14a, models.Computer@14b, models.Computer@21f, models.Computer@98, models.Computer@1a2]
scala> computerList.get(0).name
res2: java.lang.String = ASCI White
但是,一旦您开始使用db,我就遇到了两个问题。 我可以从数据库中读取内容,但不能编写更新或插入内容。 我猜这是让我感到烦恼的“伏都教巫术”。
使用scala版本,我真的可以走得更远,看看这个(继续,不要害羞,复制粘贴此代码)
$ cd <path_to_your_play2_installation>/samples/scala/computer-database
$ play -DapplyEvolutions.default=true
[computer-database] $ console
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.7.0_03).
Type in expressions to have them evaluated.
Type :help for more information.
scala> new play.core.StaticApplication(new java.io.File("."))
[info] play - database [default] connected at jdbc:h2:mem:play
[info] play - Application started (Prod)
res0: play.core.StaticApplication = play.core.StaticApplication@1eaf4b3
scala> import models._, anorm._, play.api.db._, play.api.Play.current, anorm.SqlParser._
import models._
import anorm._
import play.api.db._
import play.api.Play.current
import anorm.SqlParser._
scala> // clean-up everything
scala> DB.withConnection { implicit connection =>
SQL("delete from computer").executeUpdate()
SQL("delete from company").executeUpdate()
}
res3: Int = 42
scala> // just checking
scala> DB.withConnection { implicit connection => SQL("select count(*) from computer").as(scalar[Long].single) }
res7: Long = 0
scala> DB.withConnection { implicit connection => SQL("select count(*) from company").as(scalar[Long].single) }
res8: Long = 0
scala> Company.options
res9: Seq[(String, String)] = List()
好吧,让我们创建几个公司
scala>
DB.withConnection { implicit connection =>
Seq((1, "my Company"), (2, "my second company")).map { company =>
SQL("insert into company values ( %s, '%s')".format(company._1, company._2) ).executeUpdate()
}
}
res50: Seq[Int] = List(1, 1)
scala> Company.options
res51: Seq[(String, String)] = List((1,my Company), (2,my second company))
还有几台电脑
scala> val newComputer = Computer(NotAssigned, "my computer", None, None, Some(1))
newComputer: models.Computer = Computer(NotAssigned,my computer,None,None,Some(1))
scala> Computer.insert(newComputer)
res67: Int = 1
scala> Computer.insert(Computer(NotAssigned, "my second comuter", None, None, Some(2)))
scala>
DB.withConnection { implicit connection =>
SQL("select * from computer").as(Computer.withCompany *)
}
res8: List[(models.Computer, Option[models.Company])] = List((Computer(1000,my computer,None,None,Some(1)),None), (Computer(1001,my second comuter,None,None,Some(2)),None))
我们会稍微夸大一下这个示例,但是我想您已经了解了如何使用Play控制台,因此请继续学习!
参考: Play框架2快速提示:在我们的Play框架玩乐中,从我们的JCG合作伙伴 Sebastian Scarano 的scala控制台中交互式地玩您的应用程序 ! 博客。
翻译自: https://www.javacodegeeks.com/2012/04/play-framework-2-quicktip-scala-console.html
scala控制台