2012-03-07 10 views

答えて

1

ないことを値私はこれが適切か何らかの方法で良いアイデアだと提案しますが、列挙子を検査して潜在的なオブジェクトにヒントを与える情報を取得する可能性があります。これはもちろん、あなたがこれをしたいと思う理由の質問...あなたはその後、基礎となるオブジェクトについての情報を引き出すためにしようとする正規表現を使用することができます

a = [1,2,3,4] 
=> [1, 2, 3, 4] 
e = a.each 
=> #<Enumerator: ...> 
e.inspect 
=> "<#Enumerator: [1, 2, 3, 4]:each>" 

a = { :foo => "bar" } 
=> {:foo=>"bar"} 
e = a.each 
=> #<Enumerator: ...>  
e.inspect 
=> "#<Enumerator: {:foo=>\"bar\"}:each>" 

を頼みます。おそらくこれがうまくいかない場合があります(範囲では機能します)。私は、おそらくこれを行う正当な理由はないことを再度強調したいと思います。

+0

アンドリューが私を殴った。通常、誰かが新しい回答を投稿したときに通知を受け取ります。これは恐ろしい醜いことだと絶対に同意した。 –

4

での作業

することはできません(簡単に)。*

も次のことができるようにすべきです。列挙子は、その中に含まれる内容を気にすることを意図したものではなく、何かを繰り返し処理することを意図しています。とにかく列挙子を渡すべきではないでしょう:実際のオブジェクトの周りを回るだけです。

けれども、あなたは[]または{}、またはそれは#<Set: {}>のような別のタイプのケースのいずれかのために正規表現で[].each.inspectを解析するような嫌なことを行うことができます。しかしこれはちょうど恐ろしいことです。私はをなぜ再考することをお勧めしますか?あなたはこれをやりたいと思っています。

*プログラミングが簡単ではない方法は、Ruby C APIを使用してCコードを記述し、列挙子内の実際のオブジェクトポインタをタップすることです。これは、EnumeratorがCで書かれており、[].each.instance_variablesのようなものが[]を返すようにするために行われる必要があります。

+0

B Andrewの指示に従うことを決めるなら、ここから始めることができる[place](https://github.com/ruby/ruby/blob/trunk/enumerator.c#L862)です。 'eobj'はあなたが探しているオブジェクトです。 – gmile

0

これはできないと仮に言います。列挙子を作成するときにのみは、次の、現在の、などを取得する方法列挙子を伝えるために、実際にソースオブジェクト自体を参照するために、どのような要件があるように思えません...

関連する問題