Enumeration.values
v2.10.3/src/library/scala/Enumeration.scalaabstract class Enumeration (initial: Int) extends Serializable { def values: ValueSet = { if (!vsetDefined) { vset = (ValueSet.newBuilder ++= vmap.values).result() vsetDefined = true } vset }
listenTo
class QuitMenu(name: String, frame: MainFrame) extends MenuItem(name) { new Publisher { reactions += { case ButtonClicked(source) => frame.closeOperation } }.listenTo(this) }
Java.use(better, Scala); Tips
■ HashMap.scala
import java.awt.Color // ---------------------------------------- case #1 import scala.collection.mutable.HashMap val colors = HashMap.empty[String, Color] colors.put("Red", Color.red) colors.put("Green", Color.green) colors.put("Blue", Color.blue) print( colors ) // ---------------------------------------- case #2 val colors = Map( "Red" -> Color.red, "Green" -> Color.green, "Blue" -> Color.blue ) print( colors )
■ 事例:
$ cat src/HashMap.scala | scala ... scala> import java.awt.Color import java.awt.Color scala> // ---------------------------------------- case #1 scala> import scala.collection.mutable.HashMap import scala.collection.mutable.HashMap scala> val colors = HashMap.empty[String, Color] colors: scala.collection.mutable.HashMap[String,java.awt.Color] = Map() scala> colors.put("Red", Color.red) res0: Option[java.awt.Color] = None scala> colors.put("Green", Color.green) res1: Option[java.awt.Color] = None scala> colors.put("Blue", Color.blue) res2: Option[java.awt.Color] = None scala> print( colors ) Map(Red -> java.awt.Color[r=255,g=0,b=0], Green -> java.awt.Color[r=0,g=255,b=0], Blue -> java.awt.Color[r=0,g=0,b=255]) scala> // ---------------------------------------- case #2 scala> val colors = Map( | "Red" -> Color.red, | "Green" -> Color.green, | "Blue" -> Color.blue | ) colors: scala.collection.immutable.Map[java.lang.String,java.awt.Color] = Map(Red -> java.awt.Color[r=255,g=0,b=0], Green -> java.awt.Color[r=0,g=255,b=0], Blue -> java.awt.Color[r=0,g=0,b=255]) scala> print( colors ) Map(Red -> java.awt.Color[r=255,g=0,b=0], Green -> java.awt.Color[r=0,g=255,b=0], Blue -> java.awt.Color[r=0,g=0,b=255]) scala> // EOF scala> $
↑ TOP
》作業中です《
Java.use(better, Scala); Tips
■ Isort.scala
def isort[A <% Ordered[A]](xs: List[A]): List[A] = { def loop(x: A, xs: List[A]): List[A] = { xs match { case Nil => List(x) case y::ys => if (x <= y) x::xs else y::loop(x, ys) } } xs match { case Nil => Nil case x::xs => loop(x, isort(xs)) } }
可視境界
■ 事例:
$ date; cat src/Isort.scala | scala ... scala> def isort[A <% Ordered[A]](xs: List[A]): List[A] = { | def loop(x: A, xs: List[A]): List[A] = { | xs match { | case Nil => List(x) | case y::ys => | if (x <= y) x::xs | else y::loop(x, ys) | } | } | xs match { | case Nil => Nil | case x::xs => loop(x, isort(xs)) | } | } isort: [A](xs: List[A])(implicit evidence$1: (A) => Ordered[A])List[A] scala> // ------------------------------------ test case scala> import scala.util.Random import scala.util.Random scala> val s = List.fill(10) { Random.nextInt(10) } s: List[Int] = List(0, 9, 5, 6, 4, 1, 5, 1, 6, 4) scala> print( s ) List(0, 9, 5, 6, 4, 1, 5, 1, 6, 4) scala> print( isort(s) ) List(0, 1, 1, 4, 4, 5, 5, 6, 6, 9) scala> val s = "SCALA".toList s: List[Char] = List(S, C, A, L, A) scala> print( s ) List(S, C, A, L, A) scala> print( isort(s) ) List(A, A, C, L, S) scala> :type List() List[Nothing] scala> :type Nothing Failed to determine type. scala> List() ::: List(3,4,5) res4: List[Int] = List(3, 4, 5) scala> List() ::: "ABC".toList res5: List[Char] = List(A, B, C) scala> List() ::: List(null) res6: List[Null] = List(null) scala> null ::: List() res7: List[Nothing] = null scala> // ------------------------------------ case #0 scala> print( isort(List()) ) List() scala> // ------------------------------------ case #1 scala> print( isort(List(3)) ) List(3) scala> // ------------------------------------ case #2 scala> print( isort(List(3,4)) ) List(3, 4) scala> // ------------------------------------ case #3 scala> print( isort(List(4,3)) ) List(3, 4) scala> // ------------------------------------ case #4 scala> val s = "ABC".toList s: List[Char] = List(A, B, C) scala> print( s.reverse ) List(C, B, A) scala> print( isort(s.reverse) == s ) true scala> // EOF $
↑ TOP
》作業中です《
Java.use(better, Scala); Tips
■ ListBuffer
32: def xPoints(translate: Point, scale: Int) = { 33: import scala.collection.mutable.ListBuffer 34: val buf = new ListBuffer[Int] 35: vertices foreach { case (x,y) => 37: buf += translate.x + dx*scale*x 38: } 39: buf 40: }
■ for..yield
41: def yPoints(translate: Point, scale: Int) =
42: for ((x,y) <- vertices) yield translate.y + dy*scale*y
■ 付録:AppWindow.scala
tips504_Graphics2D/scala/src/AppWindow.scala1: /* 2: * Copyright (c) 2010-2014, KOTSUBU-chan and/or its affiliates. 3: * Copyright (c) 1998, Atelier-AYA. 4: * All rights reserved. 5: */ 6: package cherry.pie 7: 8: // ---------------------------------------- 9: import swing._ 10: object appWindow extends MainFrame { 11: val version = appWindow 12: .getClass.getName+": #1.0.04" 13: // ---------------------------------------- 14: title = "Graphics2D" 15: contents = new TopPanel 16: peer.setLocationRelativeTo(null) 17: } 18: 19: // ---------------------------------------- 20: class TopPanel extends Panel { 21: preferredSize = new Dimension(200,100) 22: override def paintComponent(g: Graphics2D) { 23: new Stone(new Point(12,4)).paint(g) 24: } 25: } 26: 27: // ---------------------------------------- 28: object Stone { 29: val vertices = List((1,0),(2,1),(2,3),(1,4),(0,3),(0,1)) 30: val (dx,dy) = (7,4) 31: 32: def xPoints(translate: Point, scale: Int) = { 33: import scala.collection.mutable.ListBuffer 34: val buf = new ListBuffer[Int] 35: vertices foreach { case (x,y) => 36: val px = translate.x + dx*scale*x 37: buf += px 38: } 39: buf 40: } 41: def yPoints(translate: Point, scale: Int) = 42: for *1 61: g.setColor(Color.red) 62: g.drawPolygon(xPoints, yPoints, nPoints) 63: } 64: }
↑ TOP
》作業中です《
*1:x,y) <- vertices) yield translate.y + dy*scale*y 43: def nPoints = vertices.length 44: } 45: 46: class Stone(origin: Point) { 47: def paint(g: Graphics2D) { 48: val delta = new Point(origin.x*Stone.dx, origin.y*Stone.dy) 49: val scale = 2 50: 51: val xPoints = Stone.xPoints(delta, scale).toArray 52: val yPoints = Stone.yPoints(delta, scale).toArray 53: val nPoints = Stone.nPoints 54: 55: import java.awt.Color 56: g.setColor(Color.yellow) 57: g.fillPolygon(xPoints, yPoints, nPoints) 58: 59: import java.awt.BasicStroke 60: g.setStroke(new BasicStroke(3