Дано:Pattern Matching с частным поле
scala> case class ParentPath(private val x: String) {
| val value = x.dropWhile(_ == '/')
| }
я могу сделать ParentPath
:
scala> ParentPath("/foo")
res10: ParentPath = ParentPath(/foo)
Я не могу получить доступ к его x
(из-за private
, оказывается).
scala> res10.
asInstanceOf canEqual copy isInstanceOf productArity productElement productIterator productPrefix toString value
Я могу получить его value
.
scala> res10.value
res11: String = foo
Однако, я бы предпочел, чтобы вернуть его value
, а не x
на матч картины:
scala> res10 match { case ParentPath(x) => x}
res13: String = /foo
Как я могу шаблон матч с value
, а не x
?
scala> ParentPath.unapply(res10)
res15: Option[String] = Some(/foo)
Я попытался переопределить ParentPath#unapply
, но получил ошибку компиляции:
scala> case class ParentPath(private val x: String) {
| val value = "foo"
| override def unapply(p: ParentPath): Option[String] = Some(value)
| }
<console>:15: error: method unapply overrides nothing
override def unapply(p: ParentPath): Option[String] = Some(value)
^
'вы не можете переопределить его для класса case, так или иначе' О, так что это« последний »? –
Он конфликтует с методом 'unapply', который пытается создать собеседник класса case. –