しばらく Scala を使用し、あちこち、特にここについて読んだ後
カーリーをいつ使うべきか知っていると確信していました。経験則として、実行するコードのブロックを渡したい場合は、中括弧を使用します。
中括弧を使用した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デバッガーで式を評価すると、使用しているものに関係なく正しい結果が得られることです。
最後の式だけが評価されていることに気付きました。なぜですか?