注意: このページは最後に更新されてから 2040 日が経過している記事です。 文章が腐敗している可能性があります。その点を考慮した上で確認ください。

Tips:Ruby

提供: kimoto's wiki

概要

プログラミング言語Rubyを使う上での私的メモ。プログラミングの復習や新規習得の際に、一通り出来ていると安心できる操作について構造化しまとめるためのもの

数値操作

四則演算

1 + 1
2 - 1
2 * 3
4 / 2

文字列操作

連結

"a" + "b"

分割

"a,b,c".split(",")

探索

"aabbbaaaa".grep("bbb")

正規表現

マッチング

"aaa" =~ /^.*$/

マッチングした要素の抽出

if "aiueo <hoge> aiueo" =~ /<(.*?)>/
  p Regexp.last_match[1]
end

配列操作

連結

[1,2] + [3,4]

追加

[1,2].push(3)
[1,2].shift(3)

除去

[1,2,3].unshift
[1,2,3].pop

each / map

[1,2,3].each{ |e|
  p e
}
[1,2,3].map{ |e|
  e
}

探索

[1,2,3].find{ |e| e == 2 }

選定と除外

[1,2,3].select{|e| e == 2}
[1,2,3].reject{|e| e != 2}

Web

HTML/XMLのパース

require 'rubygems'
require 'nokogiri'
require 'open-uri'

doc = Nokogiri(open("http://hoge.com/test.html").read)
doc.search(".test > .klass > #hoge :nth-child(3)) # CSS selector
doc.search("/hoge/fuga/piyo") # XPath

エンコーディング

外部エンコーディングと内部エンコーディングをUTF8に設定する

Encoding.default_external = Encoding.default_internal = "UTF-8"

UTF8のバイト列としてInvalidなものを?に置換

data = data.encode("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '?').encode('UTF-8')

リフレクション

Object#send

attr_accessorにより生成されるsetter/getterは、末尾に=をつける必要あり

object.hoge = "test"

こんな感じのコードがあったとすれば、object.send("hoge=", "test")で代入可能

options = {:title => 'This is title'}
options.each{ |k,v|
  object.send(k.to_s + "=", v)
}