2012-02-21 6 views
1

これは10 Things Every Java Programmer Should Know About Rubyトークのスライド6にあります。Rubyでは、変数名はオブジェクトではありません。どうして?

ここで私はいくつかの答えを見直しました。一般的なコンセンサスは、単なるポインタではなく、価値のあるものはすべてオブジェクトであるということです。私はこれで混乱しています。 a = 1の場合、a1とメソッドを共有し、実際にはobject_idと同じになります。どのように "aはオブジェクトである"と言うのは正確ではないのですか?

+0

スライドは「a」がオブジェクトではないと言っているわけではありません。 * name *はオブジェクトではありません。表示すると、その名前はオブジェクトを参照します。 –

+0

微妙だが重要な区別。ありがとう。 –

+0

*非常に厳密に言えば、変数名*は*オブジェクトであると主張できます。具体的には、「シンボル」です。 *変数*はオブジェクトではありません。 (メソッドでもBTWでも*メソッドを表す*プロキシオブジェクトを取得できますが、メソッド自体は取得できません) –

答えて

4

スライドに記載されている内容が正しい:変数はオブジェクトではありません。しかし、ここでの2番目のステートメントは、「単なるポインタではなく、価値のあるもの」が価値あるものとは異なる「単なるポインタ」を持たないRubyのコンテキストでも意味をなさない。オブジェクト "。

ということですが、変数aはオブジェクト1とメソッドを共有しません。それは後でa = 2と書いた場合、数字1を完全に消してしまうので、それは確かに1と同じではありません!この変数は、オブジェクト1への参照を保持する場所です。あなたはオブジェクトのようにこの場所に話すことはできません。例えば、あなたが指摘したように、変数には別のobject_idがありません。変数で行うことができるのは、参照するオブジェクトとの対話と、別のオブジェクトへの参照を使用して再割り当てすることだけです。変数自体はオブジェクトではなく、オブジェクトへの参照を格納する場所です。

+0

詳細な回答ありがとうございます。私はそれが私の周りに頭を下げるべきものの一つだと思います。他のほとんどの言語では確かにそうですが、私はちょうど2つの言語を比較する講演でそれが混乱してしまいました。実際にはそうではないRuby特有のもののように見えました。 –

+0

@ why-el:ええと、彼が指摘した理由は、Rubyの評判は、実際にはオブジェクトではないいくつかの変数が存在するときに「すべてがオブジェクトです」ということだと思います。 – Chuck

関連する問題