2-7-6 範囲(Range)
1..5 : 5が含まれる
1...5 : 5が含まれない
In [7]:
# 数値の場合
p (1..5).include?(5)
p (1...5).include?(5)
# 日時の範囲
vacation = Time.at(1343746800)..Time.at(1343725199)
p vacation.begin
p vacation.end
# 繰り返し
abc = ('a'..'c')
abc.each do |c|
p c
end
Out[7]:
2-7-7 正規表現(Regexp)
In [17]:
# 0から9までの数の並びにマッチする正規表現
pattern = /[0-9]+/
# マッチしたかを真偽値で返す
p pattern === 'HAL 900'
p pattern === 'hogehoge'
# 最初にマッチした位置を返す
p pattern =~ 'HAL 900'
p pattern =~ 'hogehoge'
# リテラルの中では式展開もできる¥
name = "hoge"
/hello, #{name}/
/\/user\/bin/
p %r(/usr/bin)
Out[17]:
2-7-8 %記法の括弧
%記法に使っている括弧には別の括弧や記号を使えます。
In [25]:
p %q{paren(and paren)}
p %r{/user/(bin|Lib)/}
# プレース以外の括弧類を使うこともできる。
# 括弧類
p %q<content1>
p %q[content2]
# 任意の記号
p %q|content3|
p %q!content4!
Out[25]:
2-7-9 手続きオブジェクト(Proc)
手続きオブジェクトは関数をオブジェクトとして表現したものです。
In [29]:
greeter = Proc.new { |name|
puts "Hello, #{name}!"
}
p greeter.call 'Proc'
p greeter.call 'Ruby'
greeter2 = Proc.new { |name|
name = name.capitalize
puts "Hello, #{name}!"
}
p greeter2.call 'proc'
# 使いドコロ
# http://qiita.com/ryosukeA/items/64a4dc87fd00f5752090
2-8 様々な代入式
2-8-1 多重代入
In [37]:
# 右辺の数が多い場合、無視される
a, b = 1, 2, 3
p a
p b
a, b = [1, 2, 3]
p a
p b
# 余った要素が配列として代入
a, *b = [1, 2, 3, 4]
p a
p b
# 左辺に対応する要素がない場合
c, d, e = [1, 2]
p c
p d
p e
# 多重代入は変数の交換する際に良く使う
f = 'f'
g = 'g'
f, g = g, f
p f
p g
Out[37]:
2-8-2 自己代入
演算結果を自身に代入し直す自己代入を行う。
In [40]:
# 計算式
a = 1
p a += 1
p aa ||=2 # b = b || 2 と同じ
Out[40]:
2-9 例外
In [41]:
1/ 0
puts 'この行は実行されない'
In [42]:
# 発生した例外に処理を行う場合
begin
1 / 0
rescue ZeroDivisionError
puts '問題発生!'
end
2-10 外部ファイルの読み込み
In [43]:
require './lib.rb'
hoge
Out[43]:
In [46]:
require './lib'
hoge
Out[46]: