A Day in the Life

2006-03-18

↓の

d:id:rubyco:20060318:new

うお、rubyco さん(たぶん隠れツンデレ)のところにもっといい解が。そっか define_method かぁ。ruby 歴二年ちょいなのにすぐに思い浮かばなかった俺って…。

.new つけるとめんどくさいから嫌い

とかいう話題だけど、つけた方がそのオブジェクトのインスタンスを返すつーのが解りやすいのでコードが読みやすくなっていいと思うんだけど。でも URI とか

uri = URI 'http://foobar.example.com/'

で違和感なく使ってるし、慣れれば new なくても問題ないのかも。あと d:id:shinichiro_h:20060318#1142614350 まねして Class#inherited つかって実装してみた。eval 使ってるとこがダサイので誰か解決方法教えて下さい!

class Class
  def inherited(subclass)
    unless subclass.to_s.include?(':') || ::Kernel.public_methods.include?(subclass)
      eval <<-EOF
        module ::Kernel
          def #{subclass}(*args)
            #{subclass}.new *args
          end
          module_function :#{subclass}
        end
      EOF
    end
  end
end

class Foo
end

p Foo()
#=> #
記事の一覧 >