2016-08-30 1 views
0

私はRubyを初めて使っています。Rubyで#から始まる変数/オブジェクト/ものは何ですか

とにかく、私はシェフプロビジョニング - awsの宝石の中でいくつかのものを試してみようとしています。特に、一つのことはと呼ばれるオブジェクトがあるということです。私は、そのオブジェクトに検査しないとき

new_resource.driver.ec2_client 

が、それはまさにこれを返します。

#<Aws::EC2::Client> 

だから、私の質問は:これは何ですか? Rubyのどのような「もの」がシャープ記号(ハッシュ)で始まり、< ...>その中にありますか?

非常に高く評価されています。

+0

複雑なルビオブジェクトのデフォルトの文字列表現であり、より親和的な文字列表現を持たない。この場合、 'Aws :: EC2 :: Client'オブジェクトです。 –

+0

おそらく[this](http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Client.html)が役に立ちます。 *シェフ*やAmazon Elastic Compute Cloud *は何も知りませんので、私は "たぶん"と言いますが、私はGoogleの使い方を知っています。私は先頭のポンド記号についてはわかりませんが、それはしばしばクラスインスタンスを示します。 –

+0

「何かのようなもの」ではなく、返されるものを正確に示してください。 <:: AWS :: EC2クライアント>#を –

答えて

2

inspect methodのデフォルトの実装です(オブジェクトIDは含める必要があります)。場合によっては独自のメソッドを実装することが有用な場合がありますので、このオブジェクトについて知りたいことの概要を即座に得ることができます。 #は単なるランダムな文字で、ここではそれ以上の意味はありません。

"#<#{self.class}:0x#{self.object_id.to_s(16)}" 

を換言すれば:あなたはそれを上書きしない限り

5

Rubyの検査方法の出力は大体このようなものです"#<ClassName:0xobject_id in hex>"

class Foo ; end 
Foo.new.inspect 
#=> "#<Foo:0x007ffe0eeea520>" 

Aws::EC2::Clientのために、それがオーバーライドされ、オブジェクトIDが含まれていないようです。

+2

は 'object_id'は1ビット左にシフトする必要があり、それは(「#<%s:%#016x>」、self.class、self.object_id << 1)' – Stefan

+1

@Stefanしたがってよりsprintfの 'のようなものだ、すなわち出力は、ゼロで埋められ「大まかに」 –

関連する問題