Techioz Blog

Rubyリフレクション - 各ブロック内の値にアクセスする

概要

これをどう説明したらいいのかよくわからないので、タイトルが弱いです。

Ruby では、配列を反復処理できます。たとえば (これは簡単な例ですが、任意のパラメータを渡すことができます)

[Integer.class, String.class, Module.class].each do |_|
  puts _
end

これによりクラスが返されます クラス クラス

理想的には各ブロック内から各配列オブジェクトの実際の値を取得することは可能ですか?

例: Integer.class、String.class、Module.class

別の例として、今回は期待される元の値は「1+1」と「2+2」です。たとえば、結果ではなく文字列としてです。

[1+1,2+2].each do |n|
  puts n
end

「元の要素」、たとえば [1+1]、[2+2] の内容を取得できますか?

["1+1","2+2"].each do |n|
  puts "calculating #{n}"
  puts eval n
end

コマンドを文字列として保存せずに、同様のことが可能かどうか(出力n)は疑問です。それが理にかなっていることを願っています!

解決策

あなたは何をしようとしているのですか?この終わりに何を得ることを期待していますか?期待される結果を知っておくと役立ちます。

 [Integer, String, Module].each do |x|
   x
 end
=> [Integer, String, Module]

Integer にそのクラスを問い合わせています。これは Class のインスタンスです。クラス名が必要な場合は、クラスのインスタンスに名前 Integer.class.name を問い合わせる必要があります。