Enumeration.values

    
v2.10.3/src/library/scala/Enumeration.scala
abstract class Enumeration (initial: Int) extends Serializable { def values: ValueSet = { if (!vsetDefined) { vset = (ValueSet.newBuilder ++= vmap.values).result() vsetDefined = true } vset }
事例
scala> Dialog.Options.values foreach println
Default
YesNo
YesNoCancel
OkCancel

scala> Dialog.Message.values foreach println
Plain
Error
Info
Warning
Question

Java.use(better, Scala); Tips

《前の記事|記事一覧|次の記事》
Java.use(better, Scala)


Tips #129

Map



小さな工数に分割できるなら
難しい仕事は何もない
Henry Ford - Wikipedia

《関連記事》

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
》作業中です《

Created: 2010/01/29|Last updated: 2014/01/08 21:50:47

Java.use(better, Scala); Tips

《前の記事|記事一覧|次の記事》
Java.use(better, Scala)


Tips #172

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
》作業中です《

Created: 2010/01/29|Last updated: 2014/01/07 1:49:58

Java.use(better, Scala); Tips

《前の記事|記事一覧|次の記事》
Java.use(better, Scala)


Tips #504

yield



知って行なわざるは知らざるに同じ
Kaibara Ekken - Wikipedia

《関連記事》

■ アプリケーションの動作

■ 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.scala
1: /* 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
》作業中です《

Created: 2012/12/18|Last updated: 2014/01/07 1:49:58

*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