sprintf

Scalaでのちょうどいいsprintf実装がみつからなかったので、
java.lang.String.format を少し使い易くしてみた。

まったく、パターンマッチ様々な感じ。

args:List[a]と書かなければならないところは完全に理解していないけど、
いまのところはスルーしておく。

    def sprintf(fmt:String, args:Any):String = args match {
      case args:List[a] => String.format(fmt, args.map(toObject).toArray)
      case arg:Any      => sprintf(fmt, List(arg))
    }
    
    def sprintf(fmt:String, a1:Any,a2:Any):String = sprintf(fmt, List(a1,a2))
    def sprintf(fmt:String, a1:Any,a2:Any,a3:Any):String = sprintf(fmt, List(a1,a2,a3))
    def sprintf(fmt:String, a1:Any,a2:Any,a3:Any,a4:Any):String = sprintf(fmt, List(a1,a2,a3,a4))
    def sprintf(fmt:String, a1:Any,a2:Any,a3:Any,a4:Any,a5:Any):String = sprintf(fmt, List(a1,a2,a3,a4,a5))
                 // : 
                 // : お好きなだけいくつでも(^^)
                 // : 

    def toObject(a:Any):java.lang.Object = a match {
      case b:Boolean => new java.lang.Boolean(b)
      case b:Byte    => new java.lang.Byte(b)
      case i:Int     => new java.lang.Integer(i)
      case l:Long    => new java.lang.Long(l)
      case f:Float   => new java.lang.Float(f)
      case d:Double  => new java.lang.Double(d)
      case c:Char    => new java.lang.Character(c)
      case s:String  => s
      case d:java.util.Date     => d
      case c:java.util.Calendar => c
      case _ => a.toString
    }