홈>
케이스 클래스가 있습니다
case class SiteID(channel: String, locale: String)
로케일은 "en-GB"또는 "en_GB"일 수 있습니다. 하이픈을 밑줄로 바꾸고 싶습니다.
아이디어는 변형하는 것이므로이 평등이 있습니다
SiteID("blabla","en-GB") == SiteID("blabla","en_GB")
다음 코드로 시도했습니다
case class SiteID(channel: String, locale: String)
object SiteID{
def apply(channel: String, locale: String):SiteID = SiteID(channel,locale.replace("-","_") )
}
- 답변 # 1
- 답변 # 2
스칼라
case class
와 함께 구성, 컴파일러는 자동으로apply
를 생성합니다 선언 된 매개 변수를 사용하는 방법. 케이스 클래스와 동일한 매개 변수 유형을 사용하여 다른 유형을 선언하면 컴파일러에서 생성 된 유형보다 우선합니다.따라서 당신의
apply
에 다른 답변에서 언급했듯이 메소드는 재귀 적으로 호출됩니다. 해결책이 제공되었다. 추가로SiteID("bla","en-GB")
가 없는지 확인해야하는 경우 값이 인스턴스화됩니다. 케이스 클래스의 생성자를 private로 선언해야합니다.case class SiteID private(channel: String, locale: String) object SiteID { def apply(channel: String, locale: String):SiteID = new SiteID(channel,locale.replace("-","_") ) } SiteID("bla","en-GB") //SiteID(a,en_GB) new SiteID("bla","en-GB") //error
관련 자료
- c++ - 기본 클래스 매개 변수가있는 파생 클래스의 복사 생성자의 정렬
- reflection - 스칼라에서 런타임에 클래스 매개 변수 데이터 유형을 찾는 방법
- Java의 Void 메소드 | BankAccount 클래스 생성자
- generics - 유형 매개 변수가 지정되지 않은 경우 Scala가 Bottom Type을 추론하는 이유는 무엇입니까?
- c++ - 템플릿 클래스 외부에서 생성자를 어떻게 정의합니까?
- postgresql - Amazon RDS의 나머지 연결 슬롯에 대한 기본 파라미터 그룹을 수정할 수 없음
- java - 기본 생성자와 매개 변수화 된 생성자가 모두 클래스에있는 이유는 무엇입니까?
- c++ - 클래스에서 참조를 초기화 할 수 있습니까? (아마 생성자에서?)
- javascript - 클래스 메서드 인수 수정
- c++ - 파생 클래스의 생성자 초기화 문제
- java - 매개 변수로 클래스 필드를 초기화하는 다양한 방법
- wpf - 클래스 유형을 매개 변수로 전달
- java - 클래스의 하위 클래스를 유형 매개 변수로 전달 (유형 매개 변수는 하위 클래스 임)
- Scala에서 Class와 Classtype의 차이점
- typeclass - 공변 유형 클래스의 스칼라 암시 적 검색은 유형 인수를 Nothing으로 대체합니다 왜?
- c++ - 클래스 생성자가 영원히 차단해도 괜찮습니까?
- inheritance - 클래스 개체를 가져 오는 클래스 생성자를 상속하는 방법 C ++
- c++ - 클래스 오류의 암시 적으로 삭제 된 복사 생성자 호출
- 파이썬에서 생성자를 통해 함수를 클래스 함수로 전달
- javascript - typescript 클래스 데코레이터 - 생성자를 재정의하지만 클래스 이름은 유지 하시겠습니까?
아마도 컴패니언 객체의 apply 메소드를 재귀 적으로 호출하고있을 것입니다. 새 연산자를 사용해보십시오.