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

class Symbol

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

Abstract

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

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

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

: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]

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

p Symbol.all_symbols #=> [:RUBY_PLATFORM, :RUBY_VERSION, ...]

リテラルで表記したシンボルのうち、コンパイル時に値が決まるものはその時に生成されます。 それ以外の式展開を含むリテラルや、メソッドで表記されたものは式の評価時に生成されます。 (何にも使われないシンボルは最適化により生成されないことがあります)

def number
  'make_3'
end

p Symbol.all_symbols.select{|sym|sym.to_s.include? 'make'}
#=> [:make_1, :make_2]

re  = #確実に生成されるように代入操作を行う
:make_1,
:'make_2',
:"#{number}",
'make_4'.intern

p Symbol.all_symbols.select{|sym|sym.to_s.include? 'make'}
#=> [:make_1, :make_2, :make_3, :make_4]

インスタンスメソッド

self <=> other -> Integer

[SEE_ALSO] String#<=>

self == other -> true | false

other がシンボルの時に true を返します。

self =~ other -> Integer

[SEE_ALSO] String#=~

self[]
slice

[SEE_ALSO] String#[], String#slice

capitalize -> Symbol

[SEE_ALSO] String#capitalize

casecmp(other) -> Integer

[SEE_ALSO] String#casecmp

downcase -> Symbol

[SEE_ALSO] String#downcase

empty? -> bool

[SEE_ALSO] String#empty?

encoding -> Encoding

[SEE_ALSO] String#encoding

id2name -> String
to_s -> String

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

逆に、文字列に対応するシンボルを得るには String#intern を使います。

p :foo.id2name
#=> "foo"

p :foo.id2name.intern == :foo
#=> true

[SEE_ALSO] String#intern

inspect -> String

Returns the representation of sym as a symbol literal.

:fred.inspect   #=> ":fred"
intern -> self
to_sym -> self

self を返します。

[SEE_ALSO] String#intern

length -> Integer
size -> Integer

[SEE_ALSO] String#length, String#size

match

[SEE_ALSO] String#match

succ -> Symbol
next -> Symbol

[SEE_ALSO] String#succ

swapcase -> Symbol

[SEE_ALSO] String#swapcase

to_proc -> Proc

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

(1..3).collect(&:to_s)  #=> ["1", "2", "3"]
(1..3).inject(&:+)      #=> 6
upcase -> Symbol

[SEE_ALSO] String#upcase

追加されるメソッド

dclone [added by rexml]

Methods

Classes