irb(main):001:0> def some_method
irb(main):002:1> begin
irb(main):003:2* xyz = 5
irb(main):004:2> zyx = 6
irb(main):005:2> end
irb(main):006:1> puts xyz
irb(main):007:1> puts zyx
irb(main):008:1> end
=> :some_method
irb(main):009:0>
irb(main):010:0* some_method
5
6
=> nil
この単純な例では、begin/end 'ブロック'(実際には式)は、begin/endの外側からアクセス可能な2つの変数(xyzとzyx)を作成します。もちろん、開始/終了は式です。Ruby:メソッドのコンテキストでコードを実行する
私がやりたいことは何とかbegin/endを変換してbegin/endでコードを分解し、別の場所に置くことができますが、some_methodで変数を作成することができます。私はこれを行うには範囲を平坦化する必要があると思うが、私はそれを行う方法を把握することはできません。
def some_method
create_variables_here
puts xyz
puts zyx
end
define_method :create_variables_here do
xyz=5
zyx=6
end
質問:私は私のような何かをしたいと思います
- は、私は可能な限り何をしたいですか?私はバインディングを使って調査しましたが、うまくいかないようです。少なくとも私のためではない。
- Rubyコードの特定の場所に字句を入れるためにC#のようなことをすることはできますか?私は考えていない負荷またはがそれを行うことができますが必要です。
いいえ、私はそれができるとは思わない(ローカル変数で) –
私の頭の上から離れて、あなたがすることができる最高のものは、代入変数です。 'xyz、zyx = create_variables'です。もっと読みやすいコードにもなります:) –
ユースケースは何ですか?私はあなたのxyz、zyx値を返すメソッドを作成するだけではどうですか?あなたが望む方法は、私が知る限りグローバル変数でのみ動作します。 – haffla