Hatena::Grouprubyist

Going My Ruby Way このページをアンテナに追加 RSSフィード

Ruby ロゴ (C) Ruby Association LLC

2010年10月30日(土)

String クラスの拡張 (習作、非実用品)

| 14:59 |  String クラスの拡張 (習作、非実用品) - Going My Ruby Way を含むブックマーク はてなブックマーク -  String クラスの拡張 (習作、非実用品) - Going My Ruby Way  String クラスの拡張 (習作、非実用品) - Going My Ruby Way のブックマークコメント

Ruby は組み込みクラスもカスタマイズできます。

そのお試しで書いた String クラスを拡張するコード。非実用品です。

ruby1.9 用。 2010/11/07修正。1.8、1.9共用。

# coding: utf-8

class String
  module XString
    def remove(s)
      sub(s, "")
    end
    alias - remove

    def indent(n, s=" ")
      (s * n) + self
    end
    alias >> indent

    def wrap(w)
      w = w.split(//) if w.kind_of?(String)
      (w[0] || "") + self + (w[-1] || w[0] || "")
    end
    alias ** wrap

    def at(n)
      self[n,1]
    end

    def ucc(sep=/[^[:alnum:]]+/)
      split(sep).map{|s| s.capitalize }.join
    end

    def lcc(sep=/[^[:alnum:]]+/)
      ucc(sep).sub(/./){ $&.downcase }
    end
  end

  include XString
end

# vim:set sts=2 sw=2 et ai:

個人的には String#delete の仕様がちょっと馴染めません。

>> "foo".delete "o"  # => "f"