의 undeprecated 적용-방법과 일치하는 방법 :(여기없는 다른 SO-티켓 REF)이 작업을 수행 할 수있는 XML 노드에 아이 업데이트하기 위해 케이스를 scala.xml.Elem
val node:Node = <item><category>1</category></item>
val root = node match {
case Elem(p,l,a,s, child @ _*) ⇒ Elem(p,l,a,s,child.filter(_.label != "category") ++ <category>2</category>:_*)
case _ ⇒ node // error case
}
이를 하나는 5 매개 변수로 minimizeEmpty
의 명시 적 이름으로 Elem 모델 방법을 사용해야로, 사용되지 않는 경고를 제공합니다 : 항상 명시 적 부울 매개 변수없이 적용 방법의 해체를 적용되는
val node:Node = <item><category>1</category></item>
val root = node match {
case Elem(p,l,a,s,m,child @ _*) ⇒ Elem(p,l,a,s,m,child.filter(_.label != "category") ++ <category>2</category>:_*)
case _ ⇒ node // error case
}
이것은 그러나, 작동하지 않습니다, 따라서 m
은 항상 유형을 얻습니다. Node
와 아무 것도 맞지 않습니다.
그렇다면 컴파일러가 올바른 생성자/적용 방법을 선택하도록 어떻게 도와 드릴까요? (스칼라 2.12.1)
작동하지 :
case Elem(p,l,a,s,m:Boolean,child @ _*)
case Elem(p,l,a,s,m @(_:Boolean),child @ _*)
case Elem(p,l,a,s,m @Boolean,child @ _*)
모든의는 방법을 적용 객체
후자의 솔루션은 내가 사용했던 것과 거의 같습니다. 귀하의 답변을 올바르게 읽었을 때 이것은 스칼라의 버그/결함입니까? 이전에 오버로드 된 함수에서'*'- 매개 변수가있는 곳에서 목격했습니다. – Jan
@Jan 좋은 질문입니다. 위의 답변에 다른 단락을 추가하여 답변했습니다. – ashawley
'e @ Elem ... '이있는 좋은 해결책은'node'의 타입이 실제로'Node' 일 때 작동하지 않습니다 ... 그래서 나는'node.asInstanceOf [Elem] .minimizeEmpty' 변형을 고수합니다 : – Jan