我想使用Maven的exec命令运行一个main方法.我可以设置它运行得很好,但我的类的输出被Maven的文本包围.
Run Code Online (Sandbox Code Playgroud)[INFO] Error stacktraces are turned on. [INFO] Scanning for projects... [WARNING] ... (actual program output) ... [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 11.351s [INFO] Finished at: Fri Apr 01 11:38:15 PDT 2011 [INFO] Final Memory: 50M/452M [INFO] ------------------------------------------------------------------------
有没有办法只捕获程序输出而不是Maven输出?或者我是否需要重写我的软件才能写入文件(不理想)?
我从一组C
目标集开始.每个集合包含单词(或没有空格的字符串).当我迭代句子时,我可以将句子视为一组观察到的单词D
.我的问题是,对于每一个句子,我想找到所有的套S
中C
,使得D
包含S
.换句话说,我想找到所有C
单词都在句子中的所有单词集.
例如,请考虑以下内容C
:
{fell, ate}
{cat, snail, tiger}
{tree, bush, jalepeno}
{pen, paperclip, stapler}
Run Code Online (Sandbox Code Playgroud)
现在,如果我看到句子"树倒在灌木丛上,因为它吃了一个jalepeno.",我想要归还两套.
{fell, ate}
{tree, bush, jalepeno}
Run Code Online (Sandbox Code Playgroud)
这似乎有点类似于特里.但是,它只是相似,因为我不匹配句子中的所有单词,而是任何子集.一个想法是将集合表示为C
类似于trie的数据结构Map[String, PseudoTrie]
,每个级别都有一个,并且当我按照排序顺序迭代句子中的单词时,遵循多条路径.
我理解这类似于搜索查询.但是,如果我需要遍历所有句子,只要每个句子的计算速度很快就可以了.迭代每个集合C
并执行包含太慢.
UPDATE
我认为人们可能会对我的一些结果感兴趣.这些定时都在100000个句子和每个目标设置C
在D
具有约4或5个字.
原始申请.迭代所有目标集并查看它们是否包含在句子中,其中句子由一组单词表示.227秒
按词汇过滤.除了句子之外的原始过程相同,由该句子中也在某个目标集合中的单词集合表示.优点是我们只需要在进行比较时考虑句子中的单词的子集.110秒
字符串被转换为从0开始的整数键.这还包括必要时在试验#2中的过滤.86秒
添加倒排索引.4秒
我也尝试使用倒排索引的BitSet.花了20秒,所以我没有坚持下去.我不确定为什么放缓 - 我可能做错了什么.
另外,我认为我最初的想法很棒(很多层次的反向索引),但它相当复杂,而且我已经有了相当不错的加速!
我正在阅读"Scala 2ed编程".在第24.4节中,注意到Iterable包含许多在没有迭代器的情况下无法有效写入的方法.表24.2包含这些方法.但是,我不明白为什么有些它们无法在迭代器上有效实现.例如,考虑zipWithIndex.
def zipWithIndex[A1 >: A, That](implicit bf: CanBuildFrom[Repr, (A1, Int), That]): That = {
val b = bf(repr)
var i = 0
for (x <- this) {
b += ((x, i))
i +=1
}
b.result
}
Run Code Online (Sandbox Code Playgroud)
为什么不将此定义移动到可遍历?在我看来,代码可能完全相同,并且效率没有差别.
有一些使用Anti-Xml从XML文档中提取信息的示例,但我没有找到使用Anti-Xml来创建XML文档的示例.Anti-Xml是否支持创建文档,或者我应该使用另一个库(哪一个?).有没有人有一个用Anti-Xml创建XML文档的例子?
我有一个外部流程,我想将其视为一个函数String=>String
.给定一行输入,它将以单行输出响应.看来我应该使用scala.sys.process,这显然是一个优雅的库,可以从scala中轻松访问许多shell操作.但是,我无法弄清楚如何执行这个简单的用例.
如果我向进程'stdin写一行,它会将结果打印在一行中.我如何使用sys.process
创建包装器,以便我可以交互使用该过程?例如,如果我有一个实现ProcessWrapper
,这是一个程序,它的输出:
// abstract definition
class ProcessWrapper(executable: String) {
def apply(line: String): String
}
// program using an implementation
val process = new ProcessWrapper("cat -b")
println(process("foo"))
println(process("bar"))
println(process("baz"))
Run Code Online (Sandbox Code Playgroud)
输出:
1 foo
2 bar
3 baz
Run Code Online (Sandbox Code Playgroud)
重要的是不要为每次调用重新加载进程,process
因为存在重要的初始化步骤.
在Scala的解析器组合器(特别是JavaTokensParser)中,有一个定义stringLiteral,它匹配类似Java的字符串.
def stringLiteral: Parser[String] =
("\""+"""([^"\p{Cntrl}\\]|\\[\\'"bfnrt]|\\u[a-fA-F0-9]{4})*"""+"\"").r
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个正则表达式不适用于长字符串.有没有人知道这样做的可重用实现,还是对空格效率更高的正则表达式的修改?
我想知道如何在Scala中编写一个方法,它接受一个函数f
和一个参数列表,args
其中每个arg是一个范围.假设我有三个参数(Range(0,2)
,Range(0,10)
,和Range(1, 5)
).然后我想迭代f
这三个参数的所有可能性.
var sum = 0.0
for (a <- arg(0)) {
for (b <- arg(1)) {
for (c <- arg(2)) {
sum += f(a, b, c)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望此方法适用于具有可变数量参数的函数.这可能吗?
编辑:当函数没有列表时,有没有办法做到这一点,而是采用标准参数列表或者是咖喱?
我经常需要总结Scala中数字列表的转换.当然,一种方法是:
list.map(transform(_)).sum
Run Code Online (Sandbox Code Playgroud)
但是,这不会在不需要创建内存时创建内存.另一种方法是折叠列表.
list.foldLeft(0.0) { (total, x) => total + f(x) }
Run Code Online (Sandbox Code Playgroud)
我发现第一个表达式比第二个表达式更容易编写.有没有一种我可以使用的方法,它具有第一种方便性和第二方的效率?或者我最好编写自己的隐式方法?
list.mapSum(transform(_))
Run Code Online (Sandbox Code Playgroud) 我管理很多maven项目.其中大多数部署到我们的内部maven存储库.现在我想开始向Maven Central发布一个项目.到目前为止,我有一个父POM指定了我们内部存储库的distributionManagement.将此信息部署到Maven Central没有意义.
我应该如何为内部项目指定分发管理?我是否应该为内部项目提供单独的父母pom组内部?
Sonatype提到了一种直接部署到他们的存储库的方法,但是他们建议使用他们自己的父pom(oss-parent).使用mvnrepository.org查看项目时,我找不到任何以oss-parent作为父项的项目.大多数项目是否手动将其工件部署到Sonatype?他们在哪里以及如何首先部署它们?
这么多的问题!我很惊讶这是多么复杂......
更新:原来一些我所确定的项目都使用OSS-父.它只是隐藏,因为它是父母的父母.
在Scala中,我可以使用上下文边界:
def sort[T : Ordered](t: Seq[T])
Run Code Online (Sandbox Code Playgroud)
意思是:
def sort[T](t: Seq[T])(implicit def Ordered[T])
Run Code Online (Sandbox Code Playgroud)
如果我有一个包含两个通用参数的类怎么办?即我希望能够确保我有一个Writer[T, String]
.是否有一种语法,我可以使用上下文边界(T : ...
)或我需要显式隐式(这是有趣的写).