小编Jen*_*olm的帖子

在SBT中更改Scala源目录

我在SBT中指向Scala源文件的自定义目录时遇到了一些麻烦.

我想sbt从给定目录而不是常规src/main/scala目录编译scala文件.

我已经尝试了定义.sbt和.scala项目文件,设置baseDirectory,scalaSource(和.scala文件中的scalaSource s).我还玩弄了从系统绝对到相对路径的所有东西,但似乎没有任何效果.它找不到指定目录下的任何.scala文件.

处理这个问题的正确方法是什么?

scala sbt

12
推荐指数
2
解决办法
7843
查看次数

总结两个选项

假设我有两个可选的Ints(都可以是Some或None):

val one : Option[Int] = Some(1)
val two : Option[Int] = Some(2)
Run Code Online (Sandbox Code Playgroud)

我的问题如下:有没有任何聪明的方法来使用Scalas精彩的收集方法来总结它们?我意识到我可以将它们合并到一个集合中,flatten并使用reduceLeftOption如下:

(one :: two :: Nil).flatten.reduceLeftOption(_ + _)     // Some(3)
Run Code Online (Sandbox Code Playgroud)

但是,上述解决方案意味着创建一个新的集合,并生活在一个富裕和发达的世界,从我可能沉浸其中的所有其他第一世界活动中抽出时间.对于像我们这样的程序员来说编程越来越奢侈的世界,必须有一个或多个豪华的第一世界答案,对吗?

编辑:所以要拼出来,这里有一些例子:

如果one = Some(1),two = Some(2)我们应该有一些(3)

如果one = Some(1),two = None我们应该有一些(1)

如果one = None,two = Some(2)我们应该有一些(2)

如果这两个onetwoNone 我们应该没有,因为无论是onetwo可以正确求和.

希望澄清的事情:-)

scala option scala-collections

8
推荐指数
3
解决办法
6880
查看次数

喷涂路由:如何响应不同的内容类型?

在喷涂中,我想根据给定的Accept标题响应不同的内容类型.我在rompetroll问题中看到了一些建议,但我想听听是否有任何规范的方法(即简单或已经实现).

从本质上讲,我想象的应该是:

path("somepath") {
  get {
    // Find whatever we would like to return (lazily)
    ...
    // Marshall resource and complete depending on the `Accept` header
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

routing scala http-headers spray http-accept-header

8
推荐指数
2
解决办法
4477
查看次数

喷涂:在范围内引入RequestContext会导致超时

嗨斯卡拉和喷人!

我有一个小烦人的问题,从RequestContext它上面提取HTTP'Accept'标题并进行匹配.在这样的正常路线上:

get {
  respondWithMediaType(`text/plain`) {
    complete ( "Hello World!" )
  }
}
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力.但每当我将上下文纳入范围时(如指令文档中所建议):

get { context => {
  respondWithMediaType(`text/plain`) {
    complete ( "Hello World!" )
  }
} }
Run Code Online (Sandbox Code Playgroud)

结果将成为以下错误消息:

The server was not able to produce a timely response to your request.
Run Code Online (Sandbox Code Playgroud)

我对Spray很新,但对我来说看起来很奇怪,将一个(否则是隐式的)对象带入范围会产生如此奇怪的副作用.你们中有谁知道发生了什么事吗?

scala http-headers spray

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

Play中的SSL连接!骨架

来自Play!API遵循以下内容:可以使用application.conf中的以下配置建立数据库连接:

db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://someDomain.com/someDatabase"
db.default.user=user
db.default.password=password
Run Code Online (Sandbox Code Playgroud)

但是当我&ssl=true在网址中投入时,它没有被注册,我收到以下错误:

引起:org.postgresql.util.PSQLException:致命:主机"xx.xx.xx.xx"没有pg_hba.conf条目,用户"user",数据库"test&ssl = true&sslfactory = org.postgresql.ssl.NonValida", SSL关闭

你有什么方法可以强制玩!通过.conf文件使用SSL连接?

更新:我忘了提到我使用该psql命令从控制台成功登录尝试.不知何故,它必须是不理解ssl参数的Play.

谢谢,

database postgresql scala playframework

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

Scala 2.10反射:从类型创建数组

我在浏览新的2.10版本的Scala(有点稀疏?)文档时遇到了麻烦.我有一种情况,我从没有类型信息的源递归读取数据.在阅读时我知道预期的类型,所以我可以检查该类型是否与传入的数据一致.

我的问题是:当尝试检索具有类型参数的集合对象(例如a Array[Int])时,如何使用期望的类型来确保读取值的类型正确?

到目前为止,我已经摆弄了Scala Api提供的代码,它允许您提取类型参数.我还读到了类标签以及它们如何用于创建数组.所以我的下一个想法是1)找到类型参数,2)从该类型创建一个数组,3)看看读数据是否适合没有例外,如下所示:

val paramType = paramInfo[Array[X]]  // Step 1: Find the X type parameter
val array     = Array[paramType](size) // Step 2: Can't use TypeTags#Type as a normal Java type...
// Step 3: Feed data into the array and hope for the best
// Step 4: Profit!
Run Code Online (Sandbox Code Playgroud)

由于上面paramType给出了Type,因此将该类型转换为类标记应该是一件简单的事情.但答案不合理我.

说实话,这个解决方案对我来说似乎有些混乱,但我无法弄清楚任何更聪明的东西.如果有其他解决方案,我全都耳朵!

提前致谢.

编辑:为了澄清,我上面的例子应该证明我想从Array [Int]中提取类型X(例如),然后创建一个包含该特定类型的数组的实例.希望更清楚.

编辑:或许可以进一步澄清(我真的让它变得不清楚吗?:-)).我想从数据源中读取一个集合.我希望用正确的,预期的类型输入该集合.所以我想说我称之为方法readData.因为我知道期望什么类型,所以我给它一个预期类型的​​类型参数.举个例子,假设是Array [Int].它可以是Array [String]或Iterable [Any]或者只是Null或者其他什么.readData调用该方法时,我希望将给定的预期类型(Array [Int])与从外部源读取的数据类型相匹配.如果找到的类型是期望类型的相同类型 - 或子类型 - 我们可以转换并返回数据.如果不是,则抛出异常,通知用户发现的数据不是预期的类型.总结一下:我如何拨打电话readData[Array[Int]]

编辑:我通过创建一个数组[Any]解决了这个问题,检索了预期的类型(上面的X)并迭代数组以查看元素是否与X的类型(或子类型)相同.如果是,我们可以安全地强制转换为数组[X].在下面的例子中,预期的类型由E表示.我知道,这非常hackish,但是再次:我很想看到替代品......

// Matches if …
Run Code Online (Sandbox Code Playgroud)

reflection types casting scala scala-2.10

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

用于输入数据的Java 8 Stream实用程序

想象一下,通过回调或InputStream您需要不断转换为Java 8的某种传入数据Stream.我们不知道传入的数据流何时停止,但我们知道它可以停止.

到目前为止,我已经看到了解决这个问题的两种方法,我对如何实现这一目标的最佳实践感兴趣.主要是因为我必须是某人以前面对的事情.必须有比下面的想法更简单的方法.

1)最简单的方法是将源视为a Supplier并仅用于Stream.generate提供数据:

Stream.generate(() -> blockCallToGetData());
Run Code Online (Sandbox Code Playgroud)

然而,这具有缺点,即流永远不会结束.因此,只要输入源停止发送,流就会一直调用该方法.除非我们自然地抛出一个Runtime异常,但这可能会变得很难看.

2)第二个想法是使用a Iterator(转换为a Spliterator)next方法阻塞,直到我们找到下一个元素.作为一个粗略的例子:

class BlockingIterator implements Iterator<Data> {

  @Override void boolean hasNext() {
    return true;
  }

  @Override Data next() {
    return blockCallToGetData();
  }

}
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,我可以通过返回停止流falsehasNext方法.但是,在我们不控制传入数据速度的情况下(例如在回调中),我们需要为迭代器保留一个就绪元素的缓冲区.在有人调用next迭代器之前,这个缓冲区可能会变得无限大.

所以,我的问题是; 将阻塞输入提供给流的最佳做法是什么?

java parsing java-8 java-stream

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

Java 8流处理不流畅

我有一个Java 8流的问题,其中数据是以突然的批量处理,而不是在请求时.我有一个相当复杂的流 - 流,必须并行化,因为我concat用来合并两个流.

我的问题源于这样一个事实,即数据似乎在大量分钟内 - 有时甚至是数小时 - 被解析.我希望一旦Stream读取传入数据就会发生这种处理,以分散工作量.批量处理几乎在所有方面都是违反直觉的.

所以,问题是为什么这个批量收集发生以及如何避免它.

我的输入是一个未知大小的Spliterator,我使用forEach作为终端操作.

java java-8 java-stream

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

遍历记录字段

在 Elm 中,我的一个记录(type alias构造)有很多条目,我想知道是否有内置的方法来遍历它。直接或通过将其转换为Dict

所以我在想:

let
  myRecord = MyRecord ...
  showEntry key value = ...
in
  map showEntry myRecord
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间!

更新

为了回答有关实际数据的问题,我有 12 个相同类型的字段。这 12 个字段都需要具有该确切名称,因此是记录类型而不是Dict. 无论它是作为记录中的字符串命名还是本身的类型都无关紧要,只要我可以从其他 11 个值中唯一标识该值。在代码中,记录看起来像:

type alias InnerType { value : Int, ... }

type alias Record = { inner1 : InnerType, inner2 : InnerType, ... }
Run Code Online (Sandbox Code Playgroud)

由于记录中的所有字段都具有相同的类型,我只是想看看是否有更简单的方法来遍历它们而不是命名所有 12 个。除非有更好的方法来表示这一点,在这种情况下我全神贯注!:-)

iteration record elm

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