scala中大括号和圆括号的真正区别
在使用Scala一段时间后,阅读了各地的相关信息,尤其是 我确信我知道什么时候该用卷发。根据经验,如果我想传递要执行的代码块,我将使用大括号 这个讨厌的bug是如何使用elastic4s DSL出现的 使用大括号:scala中大括号和圆括号的真正区别,scala,elastic4s,Scala,Elastic4s,在使用Scala一段时间后,阅读了各地的相关信息,尤其是 我确信我知道什么时候该用卷发。根据经验,如果我想传递要执行的代码块,我将使用大括号 这个讨厌的bug是如何使用elastic4s DSL出现的 使用大括号: bool { should { matchQuery("title", title) } must { termQuery("tags", category) } } 汇编至: { "bool" : { "must" : {
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调试器中计算表达式都会得到正确的结果
我注意到只对最后一个表达式进行了计算,这是为什么?问题可能不是大括号,而是中缀符号。看看台词
should {
matchQuery("title", title)
}
must {
must
进入下一行,因此它被解释为新表达式,而不是should
的延续。您可能必须将其与右大括号放在同一条线上
should {
matchQuery("title", title)
} must {
回答得很好。这也解释了为什么它在intellij调试程序中工作。bool结构是最烦人的一种,我愿意听取关于如何使它更清晰的建议。另外,另一个问题是将序列与{}结合使用,如果您有一个接受多个参数的方法,比如
bulk
,那么您必须使用()或自己创建一个Seq。