2012-08-23 6 views
1

나는 스칼라에 다음 코드는 프레임 워크를 플레이 한 :이상한 스칼라 컴파일러 경고

case class Step(name: String, f: Unit) { 
    def run = {() => f} 
    } 

컴파일러는 나에게 경우 클래스는 당신을 위해 == 방법을 정의하기 때문에 약

comparing values of type Unit and Unit using '==' will always yield true 

답변

5

그건 이상한 경고를 제공, case 클래스의 각 필드를 비교합니다. 따라서 기능이 동일하지 않은 경우에도 Step("a", println("1")) == Step("a", println("2"))은 사실입니다.

+0

좋아, 이해, 사례 클래스는 적용을 자동적으로 적용 취소 방법 작성, 지금은 기억을. 그러나 이것을 어떻게 써야합니까? 아니면 그냥 사례 클래스를 포기하고 클래스 매개 변수가있는 간단한 클래스로 전환해야합니까? –

+0

적용 메소드가있는 컴패니언 개체입니까? 어떻게 들리니? –

+0

네, 그것은 매력처럼 작동하여 답을 받아 들일 것입니다! –

2

아마도 매우 f: Unit이 필요합니다. 결국 Unit의 값은 ()입니다.

Step("Debugging", println("here")) 

어떤이, 참으로, 모든 종류의를 존중하지만 것입니다 "여기"하지 인쇄 run를 호출하거나 run의 반환 값을 적용 :

나는 당신이이 일을 생각 할 것 같아요. 대신 Step을 초기화하고 ()의 반환 값을 f으로 전달하면 "여기"가 인쇄됩니다. run으로 전화하면 아무 것도하지 않습니다.

아마도 당신은 대신를 원 :

case class Step(name: String, f: => Unit) { 
    def run = {() => f} 
} 

심지어 :

case class Step(name: String, f: => Unit) { 
    def run = f 
}