Ruby 2.5.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > 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 クラスのメソッドと同名で似た働きをするものもあります。

GC

内部的にシンボルは

の2つにより実装されています。そのため同じシンボル(同じ文字列から作られたシンボル)を複製しても同じ要素へのポインタが使われるだけなのでメモリ使用量は普通の文字列と比べて少ないです。

2.2.0 以降においては、テーブルに記録された情報は Ruby によって GC されます。すなわち、ある使わなくなったシンボルのテーブル上の情報はGCによって削除されます。

2.1 以前ではこの機能がなかったため、ユーザからの入力をシンボルに変換するようなプログラムは DoS に対して弱い可能性がありましたが、そのような問題は2.2以降では解決されました。

ただし拡張ライブラリ内で rb_intern によって生成されたシンボルに関するテーブル上の情報はGCされませんので注意してください。

特異メソッド

定義 説明
all_symbols -> [Symbol]

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

インスタンスメソッド

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

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

self == other -> true | false

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

self =~ 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(*options) -> Symbol

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

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

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

casecmp?(other) -> bool | nil

大文字小文字の違いを無視しシンボルを比較します。シンボルが一致する場合には true を返し、一致しない場合には false を返します。

downcase(*options) -> 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

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

match(other) -> MatchData | nil

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

match?(regexp, pos = 0) -> bool

regexp.match?(self, pos) と同じです。 regexp が文字列の場合は、正規表現にコンパイルします。詳しくは Regexp#match? を参照してください。

succ -> Symbol
next -> Symbol

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

swapcase(*options) -> Symbol

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

to_proc -> Proc

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

upcase(*options) -> Symbol

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

継承したメソッド

! != __id__ __send__ instance_eval instance_exec method_missing singleton_method_added singleton_method_removed singleton_method_undefined < <= > >= between? clamp !~ === _dump class clone define_singleton_method display enum_for eql? equal? extend freeze frozen? hash initialize initialize_copy instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself marshal_dump marshal_load method methods nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods psych_to_yaml public_method public_methods public_send remove_instance_variable respond_to? respond_to_missing? send singleton_class singleton_method singleton_methods taint tainted? tap to_a to_ary to_hash to_int to_io to_regexp to_str trust untaint untrust untrusted? yield_self .new .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_ENGINE_VERSION ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE

追加されるメソッド

定義 説明 ライブラリ
json_create(hash) -> Symbol

JSON のオブジェクトから Symbol のオブジェクトを生成して返します。

json/add/symbol
to_json(*args) -> String

自身を JSON 形式の文字列に変換して返します。

json/add/symbol