質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

1回答

1220閲覧

シンボルに関して

cheeeeeeese

総合スコア179

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2015/09/02 03:20

皆様、質問がございます。よろしくお願い申し上げます。
##シンボルに関しての二つの質問

1

Rubyにおいて、オブジェクトであれば「シンボル」オブジェクトに再生成してもいいのでしょうか?? Rubyにおいては、操作できるものは全てオブジェクトであると考えているため、 操作できないもの>>>メソッド以外は全てシンボルにしても規約に反しないのかと疑問に思い、質問致します。

2

初めてのRubyでは、シンボルとは大まかに言って「intern」された文字列と言及しています。 この「intern」表現に関してもお教え頂ければ幸いです。

失礼致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

オブジェクトであれば「シンボル」オブジェクトに再生成してもいいのでしょうか??

「再生成」とは見慣れない表現ですが、それは具体的にどういう操作のことでしょうか?

internは元々はLISPの関数ですね。おそらくは、internal が語源だと思います。内部表現に変換するということです。シンボルリテラルの場合は、これはコンパイル時に行われます。

具体的には、シンボルを表す文字列をテーブルに登録して、そのテーブルエントリ位置を示す短い固定長のデータ(メモリアドレスを表現できる以上の長さだと思うので、環境によって4バイトとか8バイトとか)に変換したものです。ちゃんとソースを読んだわけではないですが、おそらくはObject#object_idが返す値。

シンボル同士の比較は、このデータの比較で済むので、マシン語1つで処理出来ます(つまりFixnumと同じ程度の処理時間)。文字列だと1文字ずつの比較をループを回して処理しないといけないのに比べると、効率が大きく違うことが分かると思います。

投稿2015/09/02 11:43

otn

総合スコア84421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問