Arrayを継承したクラスの表示
Arrayだけハミ子なのねしらんかったしらんかった。というか汚い。
irb(main):001:0> module PTest irb(main):002:1> def to_s; "to_s" end irb(main):003:1> def inspect; "inspect" end irb(main):004:1> end => nil irb(main):005:0> class A ; include PTest end => A irb(main):006:0> class B < Array; include PTest end => B irb(main):007:0> p A.new inspect => inspect irb(main):008:0> p B.new inspect => inspect irb(main):009:0> puts A.new to_s => nil irb(main):010:0> puts B.new => nil
実際、1.9.3(2.1系でもいいんだけどif抜けて最適化されてるので判りにくい)のコードを見ると
VALUE rb_io_puts(int argc, VALUE *argv, VALUE out) { int i; VALUE line; : : for (i=0; i<argc; i++) { if (TYPE(argv[i]) == T_STRING) { line = argv[i]; goto string; } line = rb_check_array_type(argv[i]); if (!NIL_P(line)) { rb_exec_recursive(io_puts_ary, line, out); continue; } : : }
あー
いや何をしようとしてたかっていうと、連分数クラスをArray継承で作ってて、連分数表示をputsで出そうとしたらはまったという、、、
https://gist.github.com/tkuro11/5c96e0a94d822bf2f806
p つかうか、Arrayから継承あきらめるか。配列的に 連分数係数を指定できるのでいいと思ったんだけどなー