Ruby Tips!

RubyのTipsを紹介します

2014-03-21から1日間の記事一覧

Rubyで文字列を連結する

Rubyで文字列を連結するにはString#+を使う。 p "123" + "abc" #=> "123abc" String#+は常に新しい文字列を生成して返すことに注意。巨大な文字列を生成するとメモリ使用量が膨大になる可能性がある。破壊的に文字列の末尾に別の文字列を連結したい場合は文…

多次元配列の要素を走査する

Rubyで多次元配列を表現する - Ruby Tips!で、Rubyにおける多次元配列は、配列の配列だと説明した。配列はArray#eachで要素を順に走査することができる。多次元配列の要素は以下のようにArray#eachを入れ子にすることで走査できる。3次元以上の配列について…

正規表現でマッチした部分文字列を取り出す

最初にマッチした部分文字列全体を取り出す 文字列から正規表現でマッチした最初の部分文字列を取り出すにはString#slice(正規表現)を使う。 p "Apple Orange Mango".slice(/\w+/) #=> "Apple" 正規表現が括弧を含む場合にn番目の括弧にマッチした部分を取り…

文字の出現回数をカウントする

String#scanを使うと正規表現を使って文字列から文字を1文字ずつ取り出すことができる。 これにハッシュを組み合わせれば、以下のように簡単に文字列に含まれる文字の出現回数をカウントすることが可能だ。 str = "ruby is the best programming language" t…

特異メソッドを定義する

Rubyではクラスだけなくあるオブジェクトに固有なメソッドを定義することができる。 そのようなメソッドのことを特異メソッドと呼ぶ。 以下はobjに特異メソッドsingleton_methodを定義する例である。 特異メソッドは通常のメソッドと同じように呼び出すこと…

配列から条件を満たす要素を取得する

配列から条件を満たす要素を取得するには、Array#findまたはArray#detectを使う。 これらのメソッドは、ブロックを評価して真になる最初の要素を返す。 a = [1, 2, 3, 4, 5] p a.find{|v| v % 2 == 0 } #=> 2 p a.detect{|v| v % 2 == 0 } #=> 2 条件を満た…

ディレクトリを再帰的にコピーする

ディレクトリを再帰的にコピーするにはFileUtils.cp_rが利用できる。 require 'fileutils' FileUtils.cp_r('src', 'dst') # srcをdstにコピーする 第3引数には以下のオプションが指定できる。 オプション 意味 :preserve 更新時刻、パーミッションをコピーす…

順序付きのハッシュを利用する

Ruby 1.9のハッシュは順序付きで、要素を挿入した順序に取り出すことができる。 hash = {} hash[:a] = 1 hash[:b] = 2 hash[:c] = 3 hash.each{|k, v| puts k.to_s + v.to_s #=> a1 b2 c3 } Ruby 1.8ではハッシュは順序を持たないので、Ruby 1.9のようにはい…

メソッドに別名をつける / メソッドを未定義にする

あるメソッドに別名をつけるにはaliasを使って以下のようにする。 alias println puts # printlnをputsの別名にする aliasでは識別子ではなくシンボルを使って別名をつけることもできる。 alias :println :puts メソッドを未定義にするにはundefを使う。 und…

メソッドが定義されていなければメソッドを定義する

クラスにあるメソッドが定義されていない場合にのみ、そのメソッドをモンキーパッチで定義するには、以下のようにする。method_defined?はクラスにメソッドが定義されているかを確認するメソッドだ。 if Clazz.method_defined?(:method) class Clazz def met…