2014-03-28から1日間の記事一覧
配列やハッシュはinspectメソッドで人間が読める形式で文字列化することができる。 a = [1, 2, 3] h = {a:1, b:2} puts a.inspect #=> [1, 2, 3] puts h.inspect #=> {:a=>1, :b=>2} pは内部でオブジェクトをinspectするためデバッグに便利である。 a = [1, …
配列の数値の総和を求める処理は、Array#injectメソッドを使って以下のように書ける。 p [1, 2, 3, 4, 5].inject(:+) #=> 15
数値を3桁ずつカンマで区切って整形するには、数値をいったん文字列に変換した上で、String#gsubで正規表現による置換を行えば良い。以下はこの方法で数値をカンマ区切りで整形する例である。 num = 1234567890 p num.to_s.gsub(/(\d)(?=\d{3}+$)/, '\\1,') …
文字列を単語に分割するにはStging#splitメソッドが利用できる。 p "foo bar buz".split #=> ["foo", "bar", "buz"] Stging#splitメソッドは引数にスプリッタを取るが、スプリッタが空文字列''かnilの場合は、文字列の前後の空白文字を除去して空白文字をス…
Kernel.#eval、Module#module_eval、BasicObject#instance_evalでは引数にファイル名と行番号を与えることで、スタックトレースのファイル名と行番号を差し替えることができる。以下は文字列がtest.rbの100行目に書かれているかのようにスタックトレースを表…
Dir.globを使えばシェル風のワイルドカードにマッチしたパスの一覧を取得することができる。Dir.globで指定できるワイルドカードには以下がある。 ワイルドカード 意味 * 任意の文字列 ? 任意の1文字 [] 括弧内のいずれかの文字 {} 括弧内の文字の組み合わせ…
Rubyにおける無名関数の正体はProcオブジェクトである。Procオブジェクトの生成には、kernel#.lambda、Kernel#.procまたはProc.newを使う。ProcオブジェクトはProc#callで呼び出して使うことができる。以下は2つの引数を取り、それらを加算する無名関数を生…
パスからディレクトリ名を得るにはFile.dirnameを使う。 p File.dirname("/home/rubytips86/foo.rb") #=> "/home/rubytips86" パスからファイル名を得るにはFile.basenameを使う。 p File.basename("/home/rubytips86/foo.rb") #=> "foo.rb" パスからファイ…
jpmobileライブラリを使えば携帯のメールアドレスからキャリアを判別することができる。jpmobileライブラリはgemから以下のようにインストールできる。 gem install jpmobile携帯メールアドレスからキャリアを判別するには、Jpmobile::Email.detectメソッド…
ある文字列がメールアドレスか妥当かをチェックしたい場合は、以下の正規表現が利用できる。この正規表現は実際に即してメールアドレスのフォーマットを定めたRFC2822より緩めのチェックを行うものだ。 valid_address = /\A[a-zA-Z0-9_\#!$%&`'*+\-{|}~^\/=?…
String#countは特定の文字の出現回数をカウントして返すメソッドだ。Ruby 1.9はマルチバイト文字にも対応しているが、Ruby 1.8ではマルチバイト文字に対応していない事に注意。 p "foo bar buz".count('b') #=> 2 p "ほげほげぴよぴよ".count('ほ') #=> 2 Ru…
正規表現にマッチした前後の文字列を得るには2つ方法がある。1つは組み込み変数を使う方法だ。Rubyでは正規表現によるマッチを行った後に、組み込み変数$`と$'にそれぞれ正規表現にマッチした前の文字列と後ろの文字列が格納される。2つめの方法はString#mat…
Rubyの正規表現ではメタ文字\sが空白文字にマッチする。空白文字とは文字クラス[ \t\r\n\f]のことであり、半角スペースのほかタブや改行文字にもマッチする。以下はString#gsubにより文字列から空白文字をすべて除去する例である。 p " \t\rfoo\n\f".gsub(/\…
Rubyでプログラムの実行を停止するにはKenrel.#sleepを使う。Kernel.#sleepは引数にプログラムの実行を停止する秒数を取る。 sleep(1) # 1秒停止 sleep(0.1) # 0.1秒停止 引数なしでKernel.#sleepを呼び出すとプログラムは永久に停止する。ただし他のスレッ…