Скала странный символ "_@", означающий

Мне интересно, что это за символ скала: _@,

(У поисковых систем проблемы со странными персонажами, поэтому в Google сложно что-то найти...)

Вот контекст:

def doNodeParse(json: JValue): TreeNode = {
    json match {
        case JObject(List(JField("Condition", JObject(List(JField("var", JString(variableName)), JField("Operation", JString("LT")), JField("Value", JDouble(threshold))))),
                JField("onTrue", _@ onTrue),
                JField("onFalse", _@ onFalse),
                JField("onMissing", _@ onMissing)
                )) =>
                LessThanNode(variableName, threshold, doNodeParse(onTrue), doNodeParse(onFalse), doNodeParse(onMissing))

        case _ => {
            throw new Error("failed parsing json!")
          }
    }
}

(Типы onTrue, onFalse, onMissing являются JsonAST.JValue)

1 ответ

Решение

Законно пропускать пространство между _ а также @ в сопоставлении с шаблоном, так что в этом случае это так же, как

    case JObject(List(JField("Condition", JObject(List(JField("var", JString(variableName)), JField("Operation", JString("LT")), JField("Value", JDouble(threshold))))),
            JField("onTrue", _ @ onTrue),
            JField("onFalse", _ @ onFalse),
            JField("onMissing", _ @ onMissing)
            )) =>
            LessThanNode(variableName, threshold, doNodeParse(onTrue), doNodeParse(onFalse), doNodeParse(onMissing))

Эффект оператора @ заключается в псевдониме значения, сопоставленного слева с именем справа для совпадения.

Другие вопросы по тегам