Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

does "r0", "r1" and so on have special meaning in Scala?

I get a compile error if I name some case objects "r0", "r1" and so on. If I use different names, the code compile and run as expected. A rational for that would be very welcome !

the code:

package qndTests2

sealed abstract case class Reg()
trait RReg
trait RRegNotPc extends RReg
trait LowReg extends RReg
sealed abstract case class LowRegClass() extends Reg with LowReg
sealed abstract case class RRegNotPcClass() extends Reg with RRegNotPc
case object R0 extends LowRegClass
case object R1 extends LowRegClass
case object R2 extends RRegNotPcClass
case object R3 extends Reg with RReg

sealed abstract case class Base()
trait T1
trait T2 extends T1
trait T3 extends T1
sealed abstract case class CaseClassT3() extends Base with T3
sealed abstract case class CaseClassT2() extends Base with T2
case object r0 extends CaseClassT3
case object r1 extends CaseClassT3
case object r2 extends CaseClassT2
case object r3 extends Base with T1

object test {
  def regToInt(r: RReg): Int = {
    r match{
      case R0 => 0
      case R1 => 1
      case R2 => 2
      case R3 => 3
    }
  }
  def toInt(r: T1): Int = {
    r match{
      case r0 => 0
      case r1 => 1   //error: unreachable code
      case r2 => 2   //error: unreachable code
      case r3 => 3   //error: unreachable code
    }
  }
  def main(args: Array[String]): Unit = {
    println(toInt(r0))
    println(toInt(r1))
    println(regToInt(R0))
    println(regToInt(R3))
  }
}

the package "qndTests2" contains only one file, Test.scala, and the full content of the file is above. Replace "r0" ~ "r3" by "A" ~ "D", and it compiles ! I don't the reason why... am I just very tired, overlooking something obvious ???

like image 906
acapola Avatar asked Dec 21 '22 06:12

acapola


1 Answers

It's not about r0~r3, it's about lowercase vs uppercase. See this previous question.

Your call whether it's a bug or a feature of the language spec, but it's there, section 8.1.1:

A variable pattern x is a simple identifier which starts with a lower case letter. It matches any value, and binds the variable name to that value.

like image 73
themel Avatar answered Jan 08 '23 12:01

themel