リファレンスをひきひき…(^_^;)。
こんなふうに書いた方がシンプルだよ…とか教えていただければさいわいです。
object Nabeatsu { def main(args: Array[String]) { // 1 から 40 まで数えて((3の倍数)と(3がつく数字)の時だけ"アホに"なります) 1 から 40 まで数えて( (3の倍数)と(3がつく数字)の時だけ"アホに"なって( (5の倍数)の時だけ"犬っぽく"なって( (8の倍数)の時だけ"気持ちよく"なります))) } class 範囲生成用(始め: Int) { def から(終わり: Int) = 始め to 終わり } class 範囲用(範囲: Range) { def まで数えて(すること群: List[Int => String]) = { val メソッド群 = Nabeatsu.getClass.getDeclaredMethods 範囲.foreach(各々 => { val メソッド名群 = すること群.map(すること => すること(各々)) val 出力 = メソッド名群.foldLeft(""){(結果, メソッド名) => if (メソッド名 != "") { val メソッド = メソッド群.filter(_.getName == メソッド名)(0) メソッド.invoke(Nabeatsu, Array( if (結果 == "") 各々.の読み else 結果) ).asInstanceOf[String] } else 結果 } println( if (出力 == "") 各々.toString else 出力 ) }) } } class 整数用(整数: Int) { def の倍数 = (数値: Int) => 数値 % 整数 == 0 def がつく数字 = (数値: Int) => 数値.toString.indexOf(整数.toString) > -1 def の読み:String = 整数 match { case _ if (整数 >= 10000) => throw new RuntimeException("ギブ") case _ if (整数 < 0) => "" case _ if (整数 < 10) => Array("", "いち", "に", "さん", "よん", "ご", "ろく", "なな", "はち", "きゅう")(整数) case _ => { var 残り = 整数 Array("", "じゅう", "ひゃく", "せん").foldLeft(""){ (結果: String, 小位: String) => { var 桁数字 = 残り % 10; 残り = 残り / 10 if (桁数字 == 0) 結果 else (if (桁数字 == 1 && 小位 != "") "" else 桁数字.の読み) + 小位 + 結果 } } } } } class 条件式用(条件: (Int) => Boolean) { def と(別の条件: (Int) => Boolean) = (数値: Int) => 条件(数値) || 別の条件(数値) def の時だけ(すること: String) = (数値: Int) => if (条件(数値)) すること else "" } class すること用(チェック: (Int) => String) { type T = (Int) => String // def なって(別のチェック: T) = チェック :: 別のチェック :: Nil def なって(別のチェック群: List[T]) = チェック :: 別のチェック群 def なります = チェック :: Nil } def アホに(文字列: String) = { val リスト = 文字列.toList (リスト.head :: '〜' :: リスト.tail) .foldLeft(""){(結果,各々) => 結果 + 各々.toString} } def 犬っぽく(文字列: String) = 文字列 + "バウッ" def 気持ちよく(文字列: String) = 文字列 + (文字列.toList.last match { case 'な' => "ぁ" case 'ち'|'に' => "ぃ" case 'く'|'う'|'ッ' => "ぅ" case 'ご' => "ぉ'" case _ => ""}) + "〜〜ッ" implicit def 範囲生成用へ(値: Int) = new 範囲生成用(値) implicit def 範囲用へ(範囲: Range) = new 範囲用(範囲) implicit def 整数用へ(整数: Int) = new 整数用(整数) implicit def 条件式用へ(関数: (Int) => Boolean) = new 条件式用(関数) implicit def すること用へ(関数: (Int) => String) = new すること用(関数) }