タグ

2014年11月21日のブックマーク (2件)

  • RubyでCamelCaseの文字列をsnake_caseに変換する方法 - YomuKaku Memo

    Rubyでcamel case(例えばCamelCaseのように、単語の先頭の文字を大文字にしてスペース無しでつないだ書き方)の文字列をsnake case(例えばsnake_caseのように、全て小文字の単語をアンダースコア「_」でつないだ書き方)に変換するには、以下のようなメソッドをStringクラスに追加することで実現します。 module StringUtils def to_snake_case self.gsub(/::/, '/'). gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). tr("-", "_"). downcase end end String.send :include, StringUtils Railsで使用する場合には、上の内容を例えば app/lib/str

    gam-22
    gam-22 2014/11/21
    ActiveSupportだと、“classify” と "underscore" がある
  • Rubyのmoduleをmix-inする際のincludeとextendの違いをシンプルな例で理解する

    Rubyのclassにmoduleをmix-inする場合に、moduleをclassにincludeした場合とclassをmoduleでextendした場合で何が違うのか? よく判らなくなるのでシンプルな実例でまとめます。 「モジュールがクラスメソッドではなく、インスタンスメソッドを定義しているとき、これらのインスタンスメソッドは、ほかのクラスにミックスインできる」(「プログラミング言語Ruby」261ページ)とあります。そして「モジュールをミックスインするための通常の方法は、Module.includeメソッドだが、Object.extendを使う方法もある」(同262ページ)となっています。includeとextendで何が違うの? となり、時どき理解の足りない書き方をしてNoMethodError: undefined method...のような例外をだしてしまうことがあります。そこ