2012-07-12 24 views
12

Bu Scala kodunun aşağıdaki Java kodu gibi davranmasını sağlamak için "toString" i nasıl geçersiz kılabilirim? ScalaScala Numaralandırmasında toString yöntemini geçersiz kılma

Kod

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 

Aranıyor toString davranış aşağıdaki Java koduyla aynı çıktıyı üretmelidir.

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 

ben yanlış "toString" yöntemi geçersiz kılmasını ediyorum düşünüyorum.

cevap

29

İlk olarak, evet yanlış toString yöntemini geçersiz kılıyorsunuz. Yöntemi, BIT nesnesinin kendisi üzerinde geçersiz kılıyorsunuz, bu da çok kullanışlı değil.

İkinci olarak, değer ve bunu şöyle yapabiliriz dizesini ayarlamak isterseniz Sonra

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

yapabilirsiniz basitçe

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

yaparak bu çok daha kolay yapın:

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 
İlgili konular