2010年12月24日金曜日

【ruby】シンボル

シンボルの宣言

:s = 's'
s = :s
# これは、シンボル同士の比較だから一致する。
# クォートで囲ってもシンボルは同一となる。
puts s == :"s"  # => true
puts s == :s    # => true

# これは、文字列との比較だから一致しない
puts s == "s"   # => false

string = "hoge"
# 文字列をシンボルに変換するには、internかto_symを使う
puts :hoge == string          # => false
puts :hoge == string.intern   # => true
puts :hoge == string.to_sym   # => true

シンボルを使ってリフレクション

array = Array.new
puts array                      # => []

# リフレクションでメソッドの存在チェック
puts array.respond_to?(:push)   # => true

# リフレクションでメソッド呼び出し
array.send(:push, "hoge")
puts array                      # => [hoge]