1

私はRubyを学んでいて、次のことを支援するクラスを作成しました。

class WhatImDoing
    def initialize
        puts "not doing anything"
    end
end

次の出力で:

not doing anything
#<WhatImDoing:0xb74b14e8>

私は興味があります、2行目は何ですか?作成したWhatImDoingオブジェクトの参照場所ですか?この場所からオブジェクトにアクセスできますか(ポインターなど)?など...一般的に、Rubyをよりよく理解しようとしているだけです。

ありがとう。

4

3 に答える 3

7

2 行目は の出力でirb、最後のステートメントの戻り値を示しています。

その値に等しいものを設定した場合:

> class WhatImDoing
    def initialize
      puts "not doing anything"
    end

    def ohai
      puts "Ohai"
    end
  end
> tmp = WhatImDoing.new
=> #<WhatImDoing:0x5cd5a2a9>

あなたはそれを使うことができます:

> tmp.ohai
Ohai

カスタムがある場合はto_s、代わりに次のように表示されます。

> class WhatImDoing
    def to_s
      "#{super} kthxbai"
    end
  endt
> tmp = WhatImDoing.new
=> #<WhatImDoing:0x3e389405> kthxbai 
于 2013-02-22T19:31:19.393 に答える
4

それがirbの出力だったと思います。Irb はオブジェクトを印刷しようとしました。つまり、オブジェクトを文字列に変換しようとしました。カスタム to_s ("to string") メソッドを提供しなかったため、オブジェクトは次のメソッドを継承しました。

http://ruby-doc.org/core-1.9.3/Object.html#method-i-to_s

obj を表す文字列を返します。デフォルトの to_s は、オブジェクトのクラスとオブジェクト ID のエンコーディングを出力します。特殊なケースとして、Ruby プログラムの初期実行コンテキストである最上位オブジェクトは「main」を返します。</p>

ソース コードをさらに掘り下げると、16 進数が実際には、そのオブジェクト インスタンスによって占有されているメモリ アドレスであることがわかります。Ruby では、その情報を使ってできることは何もありません。これは、オブジェクト インスタンスの一意の識別子を生成するための便利な方法です。

于 2013-02-22T19:31:00.167 に答える
2

はい、それはあなたが作成しているオブジェクトへの参照です。はい、そのオブジェクトにアクセスできます。

于 2013-02-22T19:27:57.083 に答える