我正在浏览Slick的文档,以设置一个快速工作的原型.我正在浏览这个链接.
在Mapped Tables部分中,我<>在所提到的示例中看到了一个运算符,但无法在任何地方找到任何文档.需要帮助来理解这一点.
我希望能够使用scala pickling来存储案例类的二进制表示.
我想知道是否有办法管理案例类的版本控制(协议缓冲区允许的方式)
这是我的例子
我在某个日期创建一个程序,具有以下案例类
case class MessageTest(a:String,b:String)
Run Code Online (Sandbox Code Playgroud)
然后我序列化了这个类的一个实例
import scala.pickling._
import binary._
val bytes=MessageTest("1","2").pickle
Run Code Online (Sandbox Code Playgroud)
然后我将结果存储到一个文件中
稍后,我可能现在必须在我的case类上进行演化,添加一个新的可选字段
case class MessageTest (a:String,b:String,c:Option[String]=None)
Run Code Online (Sandbox Code Playgroud)
我希望能够重用我先前存储在我的文件中的数据,对其进行反序列化,并能够恢复案例类的实例(新参数的默认值)
但是当我使用以下代码时
import scala.pickling._
import binary._
val messageback=bytes.unpickle[MessageTest]
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
java.lang.ArrayIndexOutOfBoundsException:26 at scala.pickling.binary.BinaryPickleReader $$ anonfun $ 2.apply(BinaryPickleFormat.scala:446)at scala.pickling.binary.BinaryPickleReader $$ anonfun $ 2.apply(BinaryPickleFormat.scala:434)at at scala.pickling.PickleTools $ class.withHints(Tools.scala:498)scala.pickling.binary.BinaryPickleReader.withHints(BinaryPickleFormat.scala:425)scala.pickling.binary.BinaryPickleReader.beginEntryNoTagDebug(BinaryPickleFormat.scala:434)在scala.pickling.binary.BinaryPickleReader.beginEntryNoTag(BinaryPickleFormat.scala:431)
我做错什么了吗 ?
是否存在使我的场景工作的现有方法?
问候
我有一个分支,我想合并到远程,最新的master.我的电脑上有一个本地的,过时的主人.我跑了git pull upstream master,它检索了遥控器master,这很棒,正是我想要的.然后,我不假思索地在切换到另一个分支时意外丢弃了这些更改.
虽然在我的本地主人,我已经运行git pull,而git pull upstream master现在许多次,它总是说"已经是最新的." 当它显然不是.起初git pull upstream master工作得很好,但现在它没有,并且机器认为它不是最新的.如何让我的本地主人再次与远程主人一样?
所以我开始学习Akka并尝试类型安全的例子.因此Hello Akka应用程序具有以下代码:
import akka.actor.{ ActorRef, ActorSystem, Props, Actor, Inbox }
import scala.concurrent.duration._
case object Greet
case class WhoToGreet(who: String)
case class Greeting(message: String)
class Greeter extends Actor {
var greeting = ""
def receive = {
case WhoToGreet(who) => greeting = s"hello, $who"
case Greet => sender ! Greeting(greeting) // Send the current greeting back to the sender
}
}
object HelloAkkaScala extends App {
// Create the 'helloakka' actor system
val system = ActorSystem("helloakka")
// Create the 'greeter' actor …Run Code Online (Sandbox Code Playgroud) 我正在尝试让REST服务从本地硬盘返回一个zip文件.以下就是我在做什么
@Path("/interface3/{Ent_id}/{esf_app_id}/{esf_app_ver}")
public class Interface3Mock {
// This method is called if TEXT_PLAIN is request
@GET
@Produces("application/zip")
public Response callInterface3_text(
@PathParam("Ent_id") Integer entitlement_id,
@PathParam("eapp_id") String eapp_id,
@PathParam("eapp_ver") String eapp_ver) {
File f = new File("D:\\Documentation\\Documentation.zip");
String mt = new MimetypesFileTypeMap().getContentType(f);
return Response.ok(f, mt).build();
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我使用浏览器即.Internet Explorer和URL中的键http://localhost:9788/mockRESTServer/rest/interface3/123456/k123/l345
我看到一个文件下载对话框,上面写着"你想保存文件l345`.
我想让它问我的zip下载即.D:\\Documentation\\Documentation.zip.但不知何故,它占用了请求URL中的最后一个参数.
所以我有一个看起来像这样的build.sbt,这是它的一部分。
resolvers ++= Seq(
"Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/",
"SpringSource Milestone Repository" at "http://repo.spring.io/libs-milestone-local",
"Artifactory Repository" at "http://artifactory.x.y.com:8080/artifactory/xyz/"
)
libraryDependencies ++= Seq(
"com.typesafe.akka" % "akka-actor_2.11" % akkaActorAPIVersion,
"org.scalaz" % "scalaz-core_2.11" % scalazCoreVersion,
"org.scalactic" % "scalactic_2.11" % scalacticVersion ,
"org.springframework" % "spring-context" % springLibraryVersion,
"org.springframework" % "spring-beans" % springLibraryVersion,
"org.springframework" % "spring-core" % springLibraryVersion,
"org.springframework" % "spring-context" % springLibraryVersion,
"org.springframework" % "spring-web" % springLibraryVersion,
"com.tom.som.xyz" % "xyz-abc" % Version,
"com.tom.som.xyz" % "xyz-def" % Version,
"org.scalatest" % "scalatest_2.11" % scalaTestVersion % "test",
"org.scalamock" …Run Code Online (Sandbox Code Playgroud) 我遇到了 Slick 的文档,发现它要求def *在表定义中使用一种方法来获取映射投影。所以这条线看起来像这样
def * = (name, id.?).<>(User.tupled,User.unapply)
Run Code Online (Sandbox Code Playgroud)
我看到该<>方法是在 a 上调用的tuple- 在本例中为 a Tuple2。该方法是ShapedValue在 Slick 代码中的 case 类上定义的。如何找出进行查找的隐式方法?
这是我的进口:
import scala.concurrent.Await
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import slick.driver.H2Driver.api._
import slick.lifted.ShapedValue
import slick.lifted.ProvenShape
Run Code Online (Sandbox Code Playgroud) 这是一个简单的scala代码
scala> val x = scala.collection.immutable.TreeMap[String, String]("a"->"a", "b"->"b")
x: scala.collection.immutable.TreeMap[String,String] = Map(a -> a, b -> b)
scala> val y = x.fold(""){case (acc: String, (k: String, v: String)) => acc + s""", "$k":"$v""""}
y: java.io.Serializable = , "a":"a", "b":"b"
Run Code Online (Sandbox Code Playgroud)
为什么返回类型y不是String而是java.io.Serializable?
我认为这可能是因为我正在使用模式匹配,匹配可能并非详尽无遗.所以我将代码更改为
scala> val y = x.fold(""){case (acc: String, (k:String, v:String)) => acc + s""", "$k":"$v"""" case _ => ""}
y: java.io.Serializable = , "a":"a", "b":"b"
Run Code Online (Sandbox Code Playgroud) 所以我需要根据环境变量在gradle中自定义依赖项。为此,我使用export ENV=test命令创建了一个变量。我做了一个 printenv,我看到它在 mac 上的控制台中列出。但是,当我从 build.gradle 文件执行 System.getenv() 时,它不可见。建议?
我是Scala的新手.我正在制作一个游戏,我有一个角色可以访问的类型列表Location.我有一个案例类和一个伴随对象来实现这一目标.
LinkedLocationsinside Location是一个类型数组,Location可以包含一个位置可以导致的任意数量的位置.在这种情况下,1号房间通向2号房间,反之亦然.
case class Location(name: String, desc: String, linkedLocations: Array[Location]){}
object Location {
val none: Location = Location("none","none",Array(none))
val room1: Location = Location("room 1","you are in room 1",Array(room2))
val room2: Location = Location("room 2","you are in room 2",Array(room1))
room1.linkedLocations.foreach(location=>println(location.name))
}
Run Code Online (Sandbox Code Playgroud)
我试过让它们变得懒惰,但最终会出现堆栈溢出.如何修复这样的引用问题?有没有更好的方法来设计这个?