Скала странный символ "_@", означающий
Мне интересно, что это за символ скала: _@
,
(У поисковых систем проблемы со странными персонажами, поэтому в 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))
Эффект оператора @ заключается в псевдониме значения, сопоставленного слева с именем справа для совпадения.