Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Symbolクラス

class Symbol

クラスの継承リスト: Symbol < Comparable < Object < Kernel < BasicObject

要約

シンボルを表すクラス。シンボルは任意の文字列と一対一に対応するオブジェクトです。

文字列の代わりに用いることもできますが、必ずしも文字列と同じ振る舞いをするわけではありません。 同じ内容のシンボルはかならず同一のオブジェクトです。

シンボルオブジェクトは以下のようなリテラルで得られます。

:symbol
:'symbol'
%s!symbol! # %記法

生成されたシンボルの一覧は Symbol.all_symbols で得られます。 一番目のリテラルでシンボルを表す場合、`:' の後に は識別子、メソッド名(`!',`?',`=' などの接尾辞を含む)、変数名 (`$'などの接頭辞を含む)、再定義できる演算子のいずれかに適合する ものしか書くことはできません(そうでなければ文法エラーになります)。 そうでない文字列をシンボルにしたい場合は残りの表記か String#intern を使用してください。

シンボルの実装と用途

実装

Rubyの内部実装では、メソッド名や変数名、定数名、クラス名など の`名前'を整数で管理しています。これは名前を直接文字列として処理するよりも 速度面で有利だからです。そしてその整数をRubyのコード上で表現したものがシンボルです。

シンボルは、ソース上では文字列のように見え、内部では整数として扱われる、両者を仲立ちするような存在です。

名前を管理するという役割上、シンボルと文字列は一対一に対応します。 また、文字列と違い、immutable (変更不可)であり、同値ならば必ず同一です。

p "abc" == "abc" #=> true
p "abc".equal?("abc") #=> false
p :abc == :abc #=> true
p :abc.equal?(:abc) #=> true ←同値ならば同一

用途

実用面では、シンボルは文字の意味を明確にします。`名前'を指し示す時など、 文字列そのものが必要なわけではない時に用います。

シンボルを使うメリットは

大抵のメソッドはシンボルの代わりに文字列を引数として渡すこともできるようになっています。

Symbol クラスのメソッドには、String クラスのメソッドと同名で似た働きをするものもあります。

特異メソッド

定義 説明
all_symbols -> [Symbol]

定義済みの全てのシンボルオブジェクトの配列を返します。

インスタンスメソッド

定義 説明
self <=> other -> -1 | 0 | 1

self と other のシンボルに対応する文字列を ASCII コード順で比較して、 self が大きい時には正の整数、等しい時には 0、小さい時には負の整数を返し ます。

self == other -> true | false

other が同じシンボルの時に真を返します。 そうでない場合は偽を返します。

self =~ other -> Integer | nil
match(other) -> Integer | nil

正規表現 other とのマッチを行います。

self[nth] -> String | nil
slice(nth) -> String | nil

nth 番目の文字を返します。

self[nth, len] -> String | nil
slice(nth, len) -> String | nil

nth 番目から長さ len の部分文字列を新しく作って返します。

self[substr] -> String | nil
slice(substr) -> String | nil

self が substr を含む場合、一致した文字列を新しく作って返します。

self[regexp, nth = 0] -> String | nil
slice(regexp, nth = 0) -> String | nil

正規表現 regexp の nth 番目の括弧にマッチする最初の部分文字列を返します。

self[range] -> String | nil
slice(range) -> String | nil

rangeで指定したインデックスの範囲に含まれる部分文字列を返します。

capitalize -> Symbol

シンボルに対応する文字列の先頭の文字を大文字に、残りを小文字に変更した シンボルを返します。

casecmp(other) -> -1 | 0 | 1

Symbol#<=> と同様にシンボルに対応する文字列の順序を比較しますが、 アルファベットの大文字小文字の違いを無視します。

downcase -> Symbol

大文字を小文字に変換したシンボルを返します。

empty? -> bool

自身が :"" (length が 0 のシンボル)かどうかを返します。

encoding -> Encoding

シンボルに対応する文字列のエンコーディング情報を表現した Encoding オブ ジェクトを返します。

id2name -> String
to_s -> String

シンボルに対応する文字列を返します。

inspect -> String

自身を人間に読みやすい文字列にして返します。

intern -> self
to_sym -> self

self を返します。

length -> Integer
size -> Integer

シンボルに対応する文字列の長さを返します。

succ -> Symbol
next -> Symbol

シンボルに対応する文字列の「次の」文字列に対応するシンボルを返します。

swapcase -> Symbol

'A' から 'Z' までのアルファベット大文字を小文字に、'a' から 'z' までの アルファベット小文字を大文字に変更したシンボルを返します。

to_proc -> Proc

self に対応する Proc オブジェクトを返します。

upcase -> Symbol

小文字を大文字に変換したシンボルを返します。

継承したメソッド

! != < <= > >= between? === __id__ __send__ _dump class clone display enum_for eql? equal? extend freeze frozen? hash initialize initialize_copy instance_eval instance_exec instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? marshal_dump marshal_load method method_missing methods must_be must_be_close_to must_be_empty must_be_instance_of must_be_kind_of must_be_nil must_be_same_as must_be_within_epsilon must_equal must_include must_match must_raise must_respond_to must_send must_throw nil? pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods public_methods remove_instance_variable respond_to? respond_to_missing? singleton_class singleton_method_added singleton_method_removed singleton_method_undefined singleton_methods taint tainted? tap to_a to_ary to_hash to_int to_io to_regexp to_str to_yaml to_yaml_properties to_yaml_style trust untaint untrust untrusted? wont_be wont_be_close_to wont_be_empty wont_be_instance_of wont_be_kind_of wont_be_nil wont_be_same_as wont_be_within_epsilon wont_equal wont_include wont_match wont_respond_to .new

追加されるメソッド

定義 説明 ライブラリ
dclone rexml