2012-07-12 3 views
12

"toString"을 재정 의하여 어떻게이 스칼라 코드가 다음 Java 코드처럼 동작하도록 할 수 있습니까? 스칼라에서스칼라에서 toString 메서드 재정의 열거

코드

object BIT extends Enumeration { 
    type BIT = Value 
    val ZERO, ONE, ANY = Value 

    override def toString() = 
     this match { 
     case ANY => "x " 
     case ZERO=> "0 " 
     case ONE => "1 " 
    } 
} 

val b = ONE 
println(ONE) // returns ONE 

구인의 toString 문제는 다음 Java 코드와 같은 출력을 생성한다.

public enum BIT { 
    ZERO, ONE, ANY; 

    /** print BIT as 0,1, and X */ 
    public String toString() { 
     switch (this) { 
     case ZERO: 
      return "0 "; 
     case ONE: 
      return "1 "; 
     default://ANY 
      return "X "; 
     } 
    } 
} 

BIT b = ONE; 
System.out.println(b); // returns 1 

잘못된 "toString"메서드를 재정의하고 있다고 생각합니다.

답변

29

먼저 잘못된 toString 메서드를 재정의합니다. 매우 유용하지 않은 BIT 개체 자체의 메서드를 재정의하는 것입니다.

둘째, 당신은 당신이 가치와이처럼 할 수있는 문자열을 설정하려는 경우 다음 당신은

println(BIT.ONE) //prints "1" 
1

을 할 수 단순히

object BIT extends Enumeration { 
    type BIT = Value 
    val ZERO = Value("0") 
    val ONE = Value("1") 
    val ANY = Value("x") 
} 

를 수행하여이 훨씬 쉽게 수행

scala> object BIT extends Enumeration { 
    | type BIT = Value 
    | val ZERO = Value(0, "0") 
    | val ONE = Value(1, "1") 
    | val ANY = Value("x") 
    | } 
defined module BIT 

scala> BIT.ZERO.toString 
res2: String = 0 

scala> BIT.ZERO.id 
res3: Int = 0 

scala> BIT.ANY.id 
res4: Int = 2 

scala> BIT.ANY.toString 
res5: String = x