小编Dou*_*las的帖子

在Scala中,有一种简单的方法可以将案例类转换为元组吗?

有没有一种简单的方法将案例类转换为元组?

当然,我可以轻松编写样板代码来执行此操作,但我的意思是没有样板.

我真正想要的是一种轻松地按字典顺序编写案例类的方法.我可以通过导入scala.math.Ordering.Implicits._来实现元组的目标,瞧,我的元组有一个为它们定义的Ordering.但scala.math.Ordering中的含义一般不适用于案例类.

scala tuples case-class

55
推荐指数
3
解决办法
1万
查看次数

使用Akka HTTP查询GET请求的参数(正式名称为Spray)

Akka HTTP(正式名称为Spray)的一个特性是它能够自动编组和解组从json到案例类等的数据.我已经成功地使这个工作得很好.

目前,我正在尝试创建一个使用查询参数执行GET请求的HTTP客户端.代码目前看起来像这样:

val httpResponse: Future[HttpResponse] =
  Http().singleRequest(HttpRequest(
    uri = s"""http://${config.getString("http.serverHost")}:${config.getInt("http.port")}/""" +
          s"query?seq=${seq}" +
          s"&max-mismatches=${maxMismatches}" +
          s"&pam-policy=${pamPolicy}"))
Run Code Online (Sandbox Code Playgroud)

嗯,那不是那么漂亮.如果我可以传入一个包含查询参数的case类,并且让Akka HTTP自动生成查询参数,就像它对json一样.(另外,Akka HTTP的服务器端有一种解析GET查询参数的优雅方式,所以人们会认为它也会有一种优雅的方式来生成它们.)

我想做类似以下的事情:

val httpResponse: Future[HttpResponse] =
  Http().singleRequest(HttpRequest(
    uri = s"""http://${config.getString("http.serverHost")}:${config.getInt("http.port")}/query""",
    entity = QueryParams(seq = seq, maxMismatches = maxMismatches, pamPolicy = pamPolicy)))
Run Code Online (Sandbox Code Playgroud)

只是,上述实际上并不起作用.

我想用Akka HTTP以某种方式做什么?或者我只是需要以老式的方式做事?即,显式生成查询参数,就像我在上面的第一个代码块中一样.

(我知道如果我要将其从GET更改为POST,我可能会让它更像我希望它工作,从那时起我可以从案例中自动转换POST请求的内容上课到json,但我真的不想这样做.)

akka spray akka-http

16
推荐指数
1
解决办法
9765
查看次数

有没有办法干净地杀死 uvicorn?

有没有办法干净地杀死 uvicorn?

即,如果它在终端的前台运行,我可以在它上面键入 ^C。这会导致 uvivorn 进程终止,并且所有工作进程都将被清理。(即,他们走开了。)

另一方面,如果 uvicorn 在没有终端的情况下在后台运行,那么我无法想出一种干净地杀死它的方法。它似乎忽略了 SIGTERM、SIGINT 和 SIGHUP。我可以用SIGKILL(即-9)杀死它,但是工作进程仍然存在,我必须跟踪所有工作进程并杀死它们。这并不理想。

我在 Red Hat Enterprise Linux Server 7.3 (Maipo) 上使用带有 CPython 3.7.4、uvivorn 版本 0.11.2 和 FastAPI 0.46.0 的 uvicorn。

python python-3.x fastapi uvicorn

15
推荐指数
2
解决办法
5274
查看次数

有没有办法设置Ammonite脚本中使用的Scala版本?

有没有办法设置Ammonite脚本中使用的Scala版本?

我刚刚开始使用Ammonite,乍一看它似乎远远超过scalas我迄今为止用过的脚本运行器.有了scalas,但是,我可以很容易地设定在脚本中使用Scala的版本.例如,

#!/usr/bin/env scalas

/***
scalaVersion := "2.11.8"
*/
Run Code Online (Sandbox Code Playgroud)

我在Ammonite文件中找不到任何类似声明的参考.

scripting scala ammonite

6
推荐指数
1
解决办法
797
查看次数

在这个参数化的Scala函数中,为什么需要强制转换?

在这个参数化函数中,为什么我需要演员?我怎么能摆脱它呢?

/** Filters `xs` to have only every nth element.
  */
def everyNth[A <% Iterable[B], B](xs: A, n: Int, offset: Int = 0): A =
  (xs.zipWithIndex collect { case (x, i) if (i - offset) % n == 0 => x }).asInstanceOf[A]
Run Code Online (Sandbox Code Playgroud)

如果我最后没有演员,我会收到以下错误消息:

type mismatch; found : Iterable[B] required: A
Run Code Online (Sandbox Code Playgroud)

这个函数(使用强制转换)适用于我尝试过的所有情况,我知道在REPL中输入类似下面的内容,Scala能够在不在参数化函数的上下文中正确推断结果类型:

scala> val a: Stream[Int] = (Stream.from(0).zipWithIndex collect { case (x, i) if (i + 3) % 5 == 0 => x })
a: Stream[Int] = Stream(2, ?)

scala> a …
Run Code Online (Sandbox Code Playgroud)

scala

5
推荐指数
1
解决办法
2496
查看次数

如何告诉 Git 使用与“.gitignore”不同的 gitignore 文件?

我可以告诉 Git Git 存储库在哪里--git-dir。我可以告诉 Git 工作树在哪里--work-tree。我如何告诉 Git gitignore 文件在哪里?

Q. 为什么我想做这样的事情?

A. 对于一些工作树,我有两个不同的 Git 存储库。一种是在 的标准位置.git。我用于普通版本控制的这个存储库。另一个存储库在.git.sync. 我使用这个存储库在计算机之间进行定期自动同步。即,它是我自己的小 Dropbox 克隆,用 Git 和一个定期运行的小脚本实现。

理想情况下,我可以告诉 Git.gitignore.sync用于.git.sync存储库,而不是让 Git 使用.gitignore它用于正常版本控制的相同内容。

问:我为什么不直接使用 Dropbox?

A. 它不同步符号链接。糟糕的 Dropbox!

git gitignore

5
推荐指数
1
解决办法
292
查看次数