프로그래밍에서 스칼라를 읽는 중입니다. 그것은 말한다 :스칼라 : == 기본값은 같습니까?
당신은 항상 클래스
Any
로부터 상속 된equals
방법을 재정 의하여 새로운 유형의==
의 동작을 다시 정의 할 수 있습니다. 상속 된equals
은 Java에서와 같이 재정의 (override)되지 않는 한 객체 식별자로 적용됩니다. 그래서equals
(그리고 그걸 가지고,==
)은 기본적으로eq
과 같지만 정의한 클래스에서equals
메서드를 재정 의하여 동작을 변경할 수 있습니다.Any
의 최종 메서드로 정의되어 있으므로==
을 직접 재정의 할 수 없습니다. 즉 스칼라==
취급,있는 그대로 클래스Any
에 다음과 같이 정의 된 경우 :final def == (that: Any): Boolean = if (null eq this) (null eq that) else (this equals that)
을하지만 내가 그것을 것 같다 스칼라 2.9.1에서보고 있어요 것과 jibing되지 않습니다
==
-
내가 (컴파일러에서 불만없이 필요하지
equals
에 기본하지 않는 것 같습니다.
override
)를 직접
==
을 무시할 수 없다
그래서 같은 하나 나에게 보인다 내가 잘못을하고 있어요
% scala Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29). Type in expressions to have them evaluated. Type :help for more information. scala> Rational(1) == Rational(1) res0: Boolean = false scala> Rational(1) equals Rational(1) res1: Boolean = true
- 를 제공하거나 내가의 최신 버전의 아웃 읽고 있어요 책 및 사물이 변경되었습니다.
무슨 일 이니?
같은 무언가로 자바 (그리고 스칼라 라이브러리)과 일치하는 행동, 당신은 다시 작성해야 할 것 같습니다를 얻으려면. JVM으로 돌아올 때마다이 물기가 내게 들립니다. 나는 그것을 조만간 배울 것이다. 어쨌든'a match '를 삭제하고 익명 함수로'equals '를 할당 할 수 있습니까? 'override def equals : Any => 부울 = {case r : Rational/* ... * /}'는 효과가 없습니다 ... – rampion
@rampion - 아니요, 형식 서명을 정확히 일치시켜야합니다. 'equals : Any => Boolean '은 함수 (즉, Function1 [Any, Boolean] 클래스의 인스턴스)를 반환한다는 것을 의미합니다. 개념적으로는 같은 의미이지만, 정확히 같은 방법이 아니므로 작동하지 않습니다. –