Ruby 2.2.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > 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 クラスのメソッドと同名で似た働きをするものもあります。
内部的にシンボルは
の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
|
nth 番目の文字を返します。 |
|
self[nth, len] -> String | nil
|
nth 番目から長さ len の部分文字列を新しく作って返します。 |
|
self[substr] -> String | nil
|
self が substr を含む場合、一致した文字列を新しく作って返します。 |
|
self[regexp, nth = 0] -> String | nil
|
正規表現 regexp の nth 番目の括弧にマッチする最初の部分文字列を返します。 |
|
self[range] -> String | nil
|
rangeで指定したインデックスの範囲に含まれる部分文字列を返します。 |
|
capitalize -> Symbol
|
シンボルに対応する文字列の先頭の文字を大文字に、残りを小文字に変更したシンボルを返します。 |
|
casecmp(other) -> -1 | 0 | 1 | nil
|
Symbol#<=> と同様にシンボルに対応する文字列の順序を比較しますが、アルファベットの大文字小文字の違いを無視します。 |
|
downcase -> Symbol
|
大文字を小文字に変換したシンボルを返します。 |
|
empty? -> bool
|
自身が :"" (length が 0 のシンボル)かどうかを返します。 |
|
encoding -> Encoding
|
シンボルに対応する文字列のエンコーディング情報を表現した Encoding オブジェクトを返します。 |
|
id2name -> String
|
シンボルに対応する文字列を返します。 |
|
inspect -> String
|
自身を人間に読みやすい文字列にして返します。 |
|
intern -> self
|
self を返します。 |
|
length -> Integer
|
シンボルに対応する文字列の長さを返します。 |
|
match(other) -> Integer | nil
|
正規表現 other とのマッチを行います。 |
|
succ -> Symbol
|
シンボルに対応する文字列の「次の」文字列に対応するシンボルを返します。 |
|
swapcase -> Symbol
|
'A' から 'Z' までのアルファベット大文字を小文字に、'a' から 'z' までのアルファベット小文字を大文字に変更したシンボルを返します。 |
|
to_proc -> Proc
|
self に対応する Proc オブジェクトを返します。 |
|
upcase -> Symbol
|
小文字を大文字に変換したシンボルを返します。 |
!
!=
__id__
__send__
instance_eval
instance_exec
method_missing
singleton_method_added
singleton_method_removed
singleton_method_undefined
<
<=
>
>=
between?
!~
===
_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?
.new
.yaml_tag
::ARGF
::ARGV
::DATA
::ENV
::FALSE
::NIL
::RUBY_COPYRIGHT
::RUBY_DESCRIPTION
::RUBY_ENGINE
::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 |