Rubyの標準ライブラリをPureJavaで書いてみる (2)
懲りずに続けてみます。
クラス名の衝突を先頭3文字にして回避してみましたが、ちょっと格好悪い。
- Strクラス:Stringのwrapper。Enumerableを実装してる。
- Numericクラス:数値のスーパークラス。自動変換(できるだけ)。
- Intクラス:Integerのwrapper。当面はBigIntegerのwrapper。
- Floクラス:Floatのwrapper。当面はBigDecimalのwrapper。
本体は今回もありません。出し渋っているわけではなく、まだ未完成すぎて今後も大幅に変更があるのが濃厚なためです。
Rubyで書いた場合。
class Numeric # 内部表現出力 def inner self.class.to_s + "(#{self})" end end "abcd".split(//).each do |item| puts item end puts "A".center(10, "*") n = 5 + 8 puts "n = #{n} # #{n.inner}" n = n + 1.5 puts "n = #{n} # #{n.inner}"
Javaの方。
import static lib.ruby.Kernel.*; import lib.ruby.*; import lib.ruby.Enumerable.*; public final class Main { public static void main(String[] args) { s("abcd").split("").each(new Callable<Str>() { public void call(Str element) { System.out.println(element); } }); System.out.println(s("A").center(10, "*")); Numeric n = i(5).add(n(8)); System.out.println("n = " + n.toNumber() + " # " + n); n = n.add(f(1.5f)); System.out.println("n = " + n.toNumber() + " # " + n); } }
両方の結果。
$ ruby test.rb a b c d ****A***** n = 13 # Fixnum(13) n = 14.5 # Float(14.5) $ java Main a b c d ****A***** n = 13 # Numeric(13, BIGINT) n = 14.5 # Numeric(14.5, BIGDECIMAL) $