scala中花括号和括号之间的真正区别

时间:2015-04-26 14:18:30

标签: scala elastic4s

使用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调试器中计算表达式都能得到正确的结果。

我注意到只有最后一个表达式被评估为什么会这样?

1 个答案:

答案 0 :(得分:8)

可能不是括号中的问题,而是中缀符号。看看行

  should {
    matchQuery("title", title)
  }
  must {

must转到下一行,因此它被解释为新表达式,但不是should的延续。您可能必须将它与右括号放在同一行上

  should {
    matchQuery("title", title)
  } must {