我想要一个线程安全(不可变)的Scala类来完成一项长期工作.对于某些极端情况,任务需要很长时间,所以我想实现超时.在不可变类中实现它的最佳方法是什么?
我的第一次尝试是使用这样的隐式参数:
class Worker(val input: String) {
def start: String = {
implicit val startTimeStamp = new TimeStamp
doSomething1 + doSomething2
}
def doSomething1()(implicit startTimeStamp: TimeStamp): String = { ... }
def doSomething2()(implicit startTimeStamp: TimeStamp): String = {
...
checkTimeout
...
}
}
class TimeStamp { val start = System.currentTimeMillis }
Run Code Online (Sandbox Code Playgroud)
这应该有效,但仍有很多带有隐含参数的样板代码.(在实际代码中,我doSomething在worker类中有数百个深层嵌套函数.)在Scala中有更好的方法吗?
我正在用Java中的Playframework 2.2编写一个webapp.现在我想添加一个小的独立文本到数据库导入工具,它只包含一个带有main方法的Java文件:
public static void main(String[] args) {
importTextToDatabase();
}
Run Code Online (Sandbox Code Playgroud)
activator(或sbt)(没有webapp)中运行它?我有一个 NextJS/Typescript 项目,我想在其中添加一个 CLI 脚本,该脚本应该处理服务器上的一些文件。
不幸的是我无法运行该脚本。
示例脚本src/cli.ts:
console.log("Hello world");
// Process files
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下命令运行脚本:
ts-node src/cli.ts
Run Code Online (Sandbox Code Playgroud)
但我收到此错误消息:
src/cli.ts:1:1 - error TS1208: 'cli.ts' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module.
Run Code Online (Sandbox Code Playgroud)
当我添加空的“export {}”语句时,我收到以下错误消息:
(node:15923) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
Run Code Online (Sandbox Code Playgroud)
据我所知,现在不可能将 NextJS 与 ES 模块一起使用。
还有另一种方法可以在 NextJS 项目中运行脚本吗?也许我需要更改 webpack …
我想将Maven项目迁移到Play 2/sbt:
我src/test/resources在Maven项目中有一些测试资源,我test/resources/在Play项目中移动了(感谢Schleichardt 在Stackoverflow上的回答).
这适用于普通文件(文本,二进制数据......),但现在我的Java-Source文件也存在于test/resources/目录中(我必须在不同的java源文件中测试项目中的Java解析器).当我test在游戏中调用时,这些文件也会被编译,因此我会收到错误.
如何防止文件test/resources/从Play/sbt编译?
我必须调用一个webservice,它给我一个二进制文件的内容.我只想将相同的内容返回给我的控制器的调用者:
val blobPromise = WS.url("http://url/to/webservice/file.txt").get()
Async {
blobPromise.map(f => Ok(f.body))
}
Run Code Online (Sandbox Code Playgroud)
这适用于文本文件,但二进制文件将被破坏.我在这做错了什么?(也许f.body是将Web服务的二进制结果编码为String?但是如何获取原始数据呢?)
我知道,对于大文件来说这不是一个好方法 - 我已经在Play文档中读到了有关Streaming HTTP响应的内容,但对于我来说,作为Play框架的初学者,这似乎很复杂.
我经常在我的Web应用程序中使用Twitter引导程序表单模板助手,因为这非常简单.
昨天我想创建一个带有水平字段的表单,并在GitHub上找到一个Pull-Request,带有来自guillaumebort的注释(一年),帮助器将在下一个版本中弃用.但我在Play模板助手中找不到任何关于它的内容.文档.
我与Scala的第一次接触是通过SimplyScala教程:您不需要安装任何东西,只需开始编码即可.几个小时后我爱上了这门语言......
多年以后,我为Scala库编写了一个Web文档作为Play应用程序.构建像SimplyScala这样的东西并将其集成到文档中会很酷,这样用户就可以在浏览器中输入Scala命令并获得结果.
SimplyScala就像Google App Engine上的LotREPLS(只有少数LOC的旧开源Java项目).
也可以在我自己的服务器上创建这样的东西而不会出现安全漏洞(例如,用户不应该从服务器读取文件......)?
我只需要Scala语言的"基础"而不需要像SimplyScala那样的任何导入.
我的第一个想法是编写一个自己的SecurityManager并处理超时,这样用户就不会消耗太多的服务器时间.有没有更简单的方法或现有的开源项目?
或者建议用户安装Scala并使用终端而不是浏览器更合理?;-)
我正在构建一个小型 Java 代码分析工具,想知道是否可以使用令人惊叹的 IntelliJ 编译器来获取 Java 项目的 AST?
IntelliJ几年前在 Apache 2 许可证下开源了社区版本。该项目还可以用作 Java 独立项目中的库(而不是完整 IDE 的插件)来分析 Java 项目吗?Git 存储库相当大,我很感激任何从哪里开始的提示或链接。
(我已经阅读过有关Eclipse JDT 的内容,但创建自己的 Mini-ANTLR-Java 解析器比让 Eclipse JDT 为我工作要容易得多。但如果我可以使用更复杂、始终最新的,那就太棒了-我的项目的 Java AST 的最新版本。所以我的希望寄托在 IntelliJ 编译器上。)
java parsing code-analysis intellij-idea abstract-syntax-tree
我已经阅读了《编程集体智慧》一书中的“从点击中学习”一章,并喜欢这样的想法:那里的搜索引擎了解用户点击了哪些结果,并使用此信息来提高结果的排名。
我认为,如果我可以从用户点击中学习的话,它将大大提高我的Java / Elasticsearch应用程序中搜索排名的质量。
在这本书中,他们建立了一个多人感知器(MLP)网络,甚至可以将学习到的信息用于新的搜索短语。他们使用带有SQL数据库的Python来计算搜索排名。
有没有人已经用Elasticsearch实现了这样的事情,或者知道一个示例项目?如果我可以直接在Elasticsearch中管理点击信息而不需要额外的SQL数据库,那就太好了。
java ×3
scala ×3
escaping ×1
guava ×1
immutability ×1
next.js ×1
parsing ×1
relevance ×1
sbt ×1
search ×1
timeout ×1
ts-node ×1
typescript ×1
web-services ×1