我在SBT中指向Scala源文件的自定义目录时遇到了一些麻烦.
我想sbt从给定目录而不是常规src/main/scala
目录编译scala文件.
我已经尝试了定义.sbt和.scala项目文件,设置baseDirectory
,scalaSource
(和.scala文件中的scalaSource
s).我还玩弄了从系统绝对到相对路径的所有东西,但似乎没有任何效果.它找不到指定目录下的任何.scala文件.
处理这个问题的正确方法是什么?
假设我有两个可选的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)
如果这两个one
和two
是None
我们应该没有,因为无论是one
或two
可以正确求和.
希望澄清的事情:-)
在喷涂中,我想根据给定的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)
提前致谢.
嗨斯卡拉和喷人!
我有一个小烦人的问题,从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很新,但对我来说看起来很奇怪,将一个(否则是隐式的)对象带入范围会产生如此奇怪的副作用.你们中有谁知道发生了什么事吗?
来自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.
谢谢,
我在浏览新的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) 想象一下,通过回调或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)
这样做的好处是,我可以通过返回停止流false
的hasNext
方法.但是,在我们不控制传入数据速度的情况下(例如在回调中),我们需要为迭代器保留一个就绪元素的缓冲区.在有人调用next
迭代器之前,这个缓冲区可能会变得无限大.
所以,我的问题是; 将阻塞输入提供给流的最佳做法是什么?
我有一个Java 8流的问题,其中数据是以突然的批量处理,而不是在请求时.我有一个相当复杂的流 - 流,必须并行化,因为我concat
用来合并两个流.
我的问题源于这样一个事实,即数据似乎在大量分钟内 - 有时甚至是数小时 - 被解析.我希望一旦Stream
读取传入数据就会发生这种处理,以分散工作量.批量处理几乎在所有方面都是违反直觉的.
所以,问题是为什么这个批量收集发生以及如何避免它.
我的输入是一个未知大小的Spliterator,我使用forEach作为终端操作.
在 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 个。除非有更好的方法来表示这一点,在这种情况下我全神贯注!:-)
scala ×6
http-headers ×2
java ×2
java-8 ×2
java-stream ×2
spray ×2
casting ×1
database ×1
elm ×1
iteration ×1
option ×1
parsing ×1
postgresql ×1
record ×1
reflection ×1
routing ×1
sbt ×1
scala-2.10 ×1
types ×1