使用Scala一段时间后阅读所有地方,特别是here
我确定我知道何时使用curlies。作为一个经验法则,如果我想传递一个代码块来执行,我将使用花括号。
这个令人讨厌的bug如何使用elastic4s DSL浮出水面 使用花括号:
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调试器中计算表达式都能得到正确的结果。
我注意到只有最后一个表达式被评估为什么会这样?
答案 0 :(得分:8)
可能不是括号中的问题,而是中缀符号。看看行
should {
matchQuery("title", title)
}
must {
must
转到下一行,因此它被解释为新表达式,但不是should
的延续。您可能必须将它与右括号放在同一行上
should {
matchQuery("title", title)
} must {