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 }