E161: 이미 정의됐어요
E161: 이미 정의됐어요 (Already Defined)
같은 스코프 안에 같은 합성된(synthesized) 이름을 가진 정의가 여러 개 존재할 때 발생하는 에러예요. 같은 타입의 익명 given이 여러 개 있을 때 흔히 발생하는데, 컴파일러가 그들에 동일한 이름을 만들어 내기 때문이에요.
본문
같은 타입의 익명 given을 여러 개 정의하면, 컴파일러는 타입에 기반해 이름을 합성해요(예: given_Option_String). 두 given이 같은 합성 이름을 갖게 되면 이 에러가 보고돼요.
Example
def example = {
given Option[String] = Some("a")
given Option[String] = Some("b")
()
}
Error
-- [E161] Naming Error: example.scala:3:8 --------------------------------------
3 | given Option[String] = Some("b")
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|given_Option_String is already defined as given instance given_Option_String
|
|Provide an explicit, unique name to given definitions,
|since the names assigned to anonymous givens may clash. For example:
|
| given myGiven: Option[String] // define an instance
| given myGiven @ Option[String] // as a pattern variable
Solution
def example = {
// Provide explicit unique names for givens
given first: Option[String] = Some("a")
given second: Option[String] = Some("b")
()
}
더 알아보기
given정의와 이름 합성 규칙에 대한 자세한 내용은 Scala 3 Reference의 contextual abstractions 문서를 참고하세요.