Ruby Tips!

RubyのTipsを紹介します

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

ハッシュの要素を削除する3つの方法

キーを指定した削除 ハッシュからあるキーの要素を削除するにはHash#deleteを使う。 hash = {a:123, b:234, c:345} hash.delete(:b) p hash #=> {:a=>123, :c=>345} 条件を指定した削除 ハッシュから条件を満たす要素をすべて削除するにはHash#delete_ifかHa…

ファイルの情報を取得する

Rubyで容量やパーミッションなどファイルの情報を取得するにはFile.statメソッドを使用する。File.statメソッドはファイルの情報を格納した、File::Statオブジェクトを返す。 stat = File.stat('/usr/bin/ruby') puts stat.size # 容量 puts "0%o" % stat.mo…

Rubyの予約語の一覧

Rubyの予約語には以下がある。 これらの予約語は変数名やメソッド名に使うことができず、実際に使うとエラーとなる。 BEGIN class ensure nil self when END def false not super while alias defined? for or then yield and do if redo true __LINE__ begi…

ブロックの受け取りと受け渡し

ブロックを受け取るメソッドは、仮引数に&を付けておくとブロックをProcオブジェクトとして受け取れるようになる。 def method_with_block(&blk) p blk #=> Proc end またProcオブジェクトは、実引数に&を付けてメソッドに渡せば、ブロックとして受け渡すこ…

PStoreでオブジェクトをファイルに保存する

PStoreはRubyオブジェクトを外部ファイルに保存するためのクラスである。トランザクションの仕組みを持ち、マルチプロセスで同じファイルにアクセスしてもデータが壊れないという特徴がある。ファイルへのアクセスは、まずPStoreオブジェクトをファイルを指…

オブジェクトのシリアライズとデシリアライズ

一般にオブジェクトを文字列化して保存できるようにすることをシリアライズ、逆に保存した文字列からオブジェクトを復元することをデシリアライズと呼ぶ。Rubyでこのシリアライズとデシリアライズを担うライブラリがMarshalモジュールだ。Marshal.dumpでオブ…

イベントのフックによるリフレクションプログラミング

Rubyでは決まった名前のメソッドを定義しておくと、何かイベントが発生した時に、そのイベントをフックして任意の処理を実行することができる。代表的なのはmethod_missingというメソッドによるフックだ。このメソッドは、あるオブジェクトで未定義のメソッ…

正規表現で単語をマッチさせる

特定の単語にマッチする正規表現 例えばappという単語を正規表現でマッチさせることを考える。欲しいのはappのみで、appleのようにappを含む別の単語にはマッチさせたくないとする。このような場合、単語の区切りを表すメタ文字\bを利用して、以下の正規表現…

オブジェクトをIntegerやFloatに変換する

Rubyでは、オブジェクトを整数に変換するメソッド名にto_iを使う慣例になっている。様々なRubyのクラスがこの慣例に従っており、例えば文字列や時刻、他にもnilもto_iで整数に変換することができる。 p "123".to_i #=> 123 p Time.now.to_i #=> 1395194537 p…

カレントディレクトリを取得する

カレントディレクトリを取得するには、Dir.pwdメソッドを使用する。 Dir.pwd #=> "/home/rubytips86" なおmswin32版やmingw版のRubyは、ドライブレターやUNC形式(\\サーバ名\共有名 というパスの形式)にも対応している。

文字列を指定した文字数に切り詰める

Ruby 1.8では、文字単位の指定で部分文字列を切り出すメソッドが存在しない。このため文字列を指定した文字数に切り詰めるには、String#sliceと正規表現を組み合わせなければならない。以下は文字列を5文字に切り詰める例だ。 p "abc".slice(/\A.{,5}/m) #=>…

文字列の先頭と末尾にマッチする正規表現の書き方

Rubyの正規表現では、文字列の先頭を\A、文字列の末尾を\zで表す。 p(/\Aa/ =~ "abcde") #=> 0 p(/\Ae/ =~ "abcde") #=> nil p(/e\z/ =~ "abcde") #=> 4 p(/a\z/ =~ "abcde") #=> nil 誤解されがちだが、^は文字列の先頭ではなく行頭を、$も文字列の末尾では…

現在の日付と時刻を取得する

Date、Time、DateTimeで現在の日付と時刻を取得する方法をまとめる。現在の日付を取得するには以下のようにする。 reuiqre 'date' Date.today 現在の時刻を取得するには以下のようにする。 Time.now なおDateTimeクラスの場合もnowメソッドを使う。 require …

Array#shiftとArray#pop

Array#shiftは配列の先頭の要素を取り除くメソッドで、Array#popは配列の末尾の要素を取り除くメソッドだ。 a = [1, 2, 3] p a.shift #=> 1 p a #=> [2, 3] a = [1, 2, 3] p a.pop #=> 3 p a #=> [1, 2] これらのメソッドは、引数に個数を取り、指定した個数…

Rubyでシグナルハンドラを設定する

シグナルハンドラを設定するにはSignal.trapを使う。 第1引数にはシグナルのシンボルを渡し、ブロックでシグナルを受信したときに実行するコードを与える。 以下はSIGINT受信時に、ステータス3で終了するシグナルハンドラを設定する例である。 Signal.trap(:…