트레이 트 컨텍스트에서 케이스 클래스 매개 변수에 액세스하는 방법
Aug 21 2020
나는 특성이 있습니다.
sealed trait foo
그리고 트레이 트를 확장하는 케이스 클래스 :
case class bar(data: List[String]) extends foo
bar의 데이터에 액세스하는 함수를 작성하고 싶지만 foo로 전달됩니다.
def doSomething(x: foo) = {does something with foo.data}
다음과 같이 호출됩니다.
val aBar = bar(some list)
doSomething(aBar)
하지만 doSomething 함수가 foo 유형을 기대할 때 액세스 할 수 없습니다. 막대 유형의 값에 액세스하려면이 문제를 어떻게 해결할 수 있습니까?
답변
2 SethTisue Aug 21 2020 at 08:53
프로그램의 맥락에서 이것이 의미가 있는지 모르겠지만 Foo
다음과 같이 정의 할 수 있습니다.
trait Foo {
def data: List[String]
}
그것이 의미가 없다면 아마도 패턴 일치를해야 할 것입니다 :
def doSomething(x: Foo) =
x match {
case bar: Bar => ... // or `case Bar(data)`, as Luis suggests
내가 대문자로 표기 Foo
하고 Bar
모든 곳에서 사용했습니다. 클래스와 트레이 트 이름은 스칼라 코드에서 항상 대문자로 표기해야합니다. 최소한 다른 사람 (예를 들어 Stack Overflow에서 당신을 돕는 사람들)이 혼동하지 않고 코드를 읽을 수 있기를 원한다면.