-> "Eval", | 'P' -> "Print", 'L' -> "Loop") scala> for ((k, v) <- repl) println(k + " is for " + v) R is for Read E is for Eval P is for Print L is for Loop
public final String name; public final int age; public Person(String name, int age) { this.name = name; this.age = age; } } // Mainstreamless.scala object Mainstreamless extends App { val p = new Person("John", 20) println(p.name + " is " + p.age + " years old") }
feathers = println("The duck has white and gray feathers.") } class Person { def quack = println("The person imitates a duck.") def feathers = println("The person takes a feather from the ground and shows it.") } def inTheForest(duck: { def quack; def feathers }) = { duck.quack duck.feathers }
and gray feathers. scala> inTheForest(new Person) The person imitates a duck. The person takes a feather from the ground and shows it. scala> inTheForest("Duck") error: type mismatch; found : java.lang.String("Duck") required: AnyRef{def quack: Unit; def feathers: Unit} inTheForest("Duck")
Element case class Num(value: Int) extends Element case class Neg(arg: Element) extends Element case class Add(arg1: Element, arg2: Element) extends Element def optimize(elem: Element): Element = elem match { case Neg(Neg(x)) => optimize(x) case Add(x, Num(0)) => optimize(x) case Neg(Num(x)) => Num(-x) case Add(x, Neg(y)) if x == y => Num(0) case Add(Num(x), Num(y)) => Num(x + y) case Neg(x) => Neg(optimize(x)) case Add(x, y) => Add(optimize(x), optimize(y)) case _ => elem }
– guides & tutorials • Programming in Scala: Second Edition – good book • http://scala-ide.org – Scala IDE for Eclipse • http://plugins.intellij.net/plugin/?id=1347 – IntelliJ IDEA plugin