답변:
버전 2.10부터 Scala는이 문제를 정확하게 처리하기 위해 암시 적 클래스를 도입했습니다.
이렇게하면 주어진 유형에서 래핑 된 클래스로의 암시 적 변환이 수행되며 여기에는 고유 한 메서드와 값이 포함될 수 있습니다.
특정 경우에는 다음과 같이 사용하십시오.
implicit class RichInt(x: Int) {
def isAFactorOf(y: Int) = x % y == 0
}
2.isAFactorOf(10)
// or, without dot-syntax
2 isAFactorOf 10
컴파일 할 때 원시 값을에 넣습니다 RichInt(2). RichInt를 다음과 같은 하위 클래스로 선언하면이 문제를 해결할 수 있습니다 AnyVal.
implicit class RichInt(val x: Int) extends AnyVal { ... }
이로 인해 권투가 발생하지는 않지만 일반적인 암시 적 클래스보다 제한적입니다. 값이나 상태가 아닌 메소드 만 포함 할 수 있습니다.
기본적으로 스칼라에서는 함수를 삽입 방식으로 호출 할 수 없지만, 왼쪽 인수를 암시 적으로 변환 할 수있는 유형에 대한 메소드를 정의 할 수 있습니다. 예를 들어, isAFactorOf (Int 사용) 메소드가있는 클래스를 정의하고 Int를 내재적으로이 클래스의 인스턴스로 변환 할 수 있음을 나타낼 수 있습니다.
다른 질문에 대한 이 답변 https : //.com/a/3119671 을 보면 Scala의 구문이 동일하게 작동합니다.
implicit class RichInt(i: Int) { def square() = i * i }있습니다.