retard wrote:
I've thought more than once about adding that, but it just seems
pointless. I've never run into a use case for it. If you do run into
one,

     if (ar == [1,2,3]) ...
     else if (ar == [1,2,4]) ...
     else if (ar == [1,3,2]) ...

will work just fine.

The same can be said about matching integer values:

     if (ar == 1) ...
     else if (ar == 2) ...
     else if (ar == 3) ...

I don't agree, because switching on integer values is commonplace, and switching on array literals pretty much never happens.

(Note: switching on floating point values is worse than useless, as floating point computations rarely produce exact results, and supporting such a capability will give a false sense that it should work.)


I guess the point is just to unify many kinds of cases.

class Foo
class Bar : Foo { void doBarMethod() {} }
class Bar2 : Foo { void doBar2Method() {} }

if (cast(Bar)foo)
  (cast(Bar)foo).doBarMethod();
else if (cast(Bar2)foo)
  (cast(Bar2)foo).doBar2Method();
else
  writefln("Oh no!")


I have to say, if you find code written that way, you're doing OOP wrong.


foo match {
  case b: Bar => b.doBarMethod
  case b: Bar2 => b.doBar2Method
  case _ => println("Oh no!")
}

(1, (1,2)) match {
  case (1, (1, _)) => println("nice tuple")
  case _ =>
}

def main(args: Array[Byte]) =
  args(0) match {
    case "-help" => println("Usage: ...")
    case "-moo" => println("moo")
  }

D already supports string switches.

Reply via email to