Rubyでこんなメソッドがあったんだっていう発見が頻繁に発生しているので、メモがてらにまとめておきます。
respond_to?
obj.respond_to?(name, private = false)
オブジェクトに引数(ここではname)に指定したメソッドを呼び出せるかを確認できます。もし存在すれば返り値はtrueが返り、存在しなければfalseが返ります。
ちなみに、基本publicとprotectedメソッドの確認を行いますが、第2引数にtrueを加えるとprivateメソッドも確認することができます。
send
obj.send(name, [arg...])
レシーバーが持っているメソッドを返します。引数にメソッド名を文字列かシンボルで指定し、指定するメソッドに引数が存在する場合は、第2引数以降にそれらの引数を加えます。
any?
enum.any? { |item| block }
# 例
[1, 2, 3, 44].any? { |num| num > 40 }
=> true
[1, 2, 3, 44].any? { |num| num > 45 }
=> false
enumの要素をブロック引数のitemに入れながらブロックを繰り返し実行し、blockの返り値がtrueである時点で繰り返しを中断し、返り値trueを返します。blockの返り値がすべてfalseの場合は返り値falseを返します。
include?
array.include?(obj)
# 例
[1, 2, 3, 55].include?(1)
=> true
[1, 2, 3, 55].include?(100)
=> false
引数に指定したオブジェクトが配列に含まれていればtrueを返し、含まれていなければfalseを返します。
compact
array.compact
# 例
[1, 2, nil, 3, 55, nil].compact
=> [1, 2, 3, 55]
arrayにnilが含まれていれば、そのnilを除いた配列が返り値として返ります。
merge
hash.merge(hash)
# 例
hash1 = { name: "Joy", country: "USA" }
hash2 = { interest: "sports", live: "California" }
hash1.merge(hash2)
=> {:name=>"Joy", :country=>"USA", :interest=>"sports", :live=>"California"}
引数に指定したhashをレシーバーのhashに加えて新しいhashを返します。重複しているkeyがある場合は引数のhashを使用します。
join
array.join("")
# 例
[1, 2, 3, 4].join(",")
=> "1,2,3,4"
[1, 2, 3, 4].join("")
=> "1234"
joinの引数に指定した文字を区切り文字として配列の各要素を連結させて文字列型で返り値を返します。何も引数を指定しなければ、区切り文字を使用せずに要素を連結させた文字列として返り値を返します。
strip
string.strip
# 例
" テニスしよう ".strip
=> "テニスしよう"
レシーバーの先頭、もしくは末尾に空白文字が存在する場合、それらを除去して新しい文字列を返します。
params[:keyword]などで空白文字が含まれる可能性がある場合に使用します。
ちなみに空白文字だけでなく、ユニコードも除去しちゃいます。
split
string.split(pattern = $, [limit])
# 例①
"2,3,4,44,53,222".split(",")
=> ["2", "3", "4", "44", "53", "222"]
# 例②
"2,3,4,44,53,222".split("")
=> ["2", ",", "3", ",", "4", ",", "4", "4", ",", "5", "3", ",", "2", "2", "2"]
# 例③
"2,3,4,44,53,222".split(",", 3)
=> ["2", "3", "4,44,53,222"]
引数に文字列を指定した場合は、その文字列を区切り文字として文字列を分割し、配列を返します(例①)
引数に空文字を指定すれば、レシーバーの文字列を一文字づつ分割した配列を返します(例②)
第2引数に数字を追加すれば、返り値の配列の要素の数を指定することができます(例③)
instance_variable_set
class Test
attr_accessor :hoge
end
sample = Sample.new
sample.instance_variable_set(:@hoge, "ほげほげ")
=> "ほげほげ"
sample.hoge
=> "ほげほげ"
レシーバーのインスタンス変数に値を設定して、その設定した値を返します。