나는 스칼라에 다음 코드는 프레임 워크를 플레이 한 :이상한 스칼라 컴파일러 경고
case class Step(name: String, f: Unit) {
def run = {() => f}
}
컴파일러는 나에게 경우 클래스는 당신을 위해 ==
방법을 정의하기 때문에 약
comparing values of type Unit and Unit using '==' will always yield true
나는 스칼라에 다음 코드는 프레임 워크를 플레이 한 :이상한 스칼라 컴파일러 경고
case class Step(name: String, f: Unit) {
def run = {() => f}
}
컴파일러는 나에게 경우 클래스는 당신을 위해 ==
방법을 정의하기 때문에 약
comparing values of type Unit and Unit using '==' will always yield true
그건 이상한 경고를 제공, case 클래스의 각 필드를 비교합니다. 따라서 기능이 동일하지 않은 경우에도 Step("a", println("1")) == Step("a", println("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
}
좋아, 이해, 사례 클래스는 적용을 자동적으로 적용 취소 방법 작성, 지금은 기억을. 그러나 이것을 어떻게 써야합니까? 아니면 그냥 사례 클래스를 포기하고 클래스 매개 변수가있는 간단한 클래스로 전환해야합니까? –
적용 메소드가있는 컴패니언 개체입니까? 어떻게 들리니? –
네, 그것은 매력처럼 작동하여 답을 받아 들일 것입니다! –