使用Scala一段时间后,阅读了很多关于它的文章,特别是这里,我确信自己知道何时使用花括号。作为一个经验法则,如果我想传递一个要执行的代码块,我会使用花括号。
然而,使用弹性搜索DSL时出现了一个令人讨厌的bug,使用花括号:
bool {
should {
matchQuery("title", title)
}
must {
termQuery("tags", category)
}
}
编译为:
{
"bool" : {
"must" : {
"term" : {
"tags" : "tech"
}
}
}
}
使用括号时:
bool {
should (
matchQuery("title", title)
) must (
termQuery("tags", category)
)
}
给出正确的结果:
{
"bool" : {
"must" : {
"term" : {
"tags" : "tech"
}
},
"should" : {
"match" : {
"title" : {
"query" : "fake",
"type" : "boolean"
}
}
}
}
}
这是使用Scala 2.11.6编译的 - 更加令人困惑的是,在IntelliJ调试器中评估表达式无论我使用什么都会得到正确的结果。我注意到只有最后一个表达式被评估了,为什么会这样?
bulk
,那么您必须使用()或创建一个Seq。 - sksamuel