変数のスコープと可視性を向上させるという点では、ブロックを使用することをお勧めします。ただし、ラムダは、保存して実行するだけの場合に最適なソリューションです。
私の理解では、command_store の外のどこかで my_first_array にアクセスしたいと思います。したがって、あなたの場合は次のようになります。
シナリオ I : my_first_array を公開したくないが、何らかの方法でそれを試してみたい場合。
def command_store
puts 'Hello World'
# here my_first_array is just a local variable inside command_store
my_first_array = Array.new(5) {|i| Random.rand(100)}
yield(my_first_array)
puts 'Hello World again'
end
command_store() do |x|
# puts '**Call from outside'
puts "The first element is #{x[0]}"
# ...
puts "The last element is #{x[-1]}"
# puts '**Call from outside again'
end
# Output:
# => Hello World
# => The first element is 41
# => The last element is 76
# => Hello World again
シナリオ II : 割り当てステートメントを外部変数に対して有効にしたいとします。この場合にバインディングを使用することを検討することもお勧めします。
def command_store(var=[])
puts 'Hello World'
# here my_first_array is just a local variable inside command_store
my_first_array = Array.new(5) {|i| Random.rand(100)}
var.replace(my_first_array)
puts 'Hello World again'
return var
end
a = Array.new
command_store(a)
puts a[0]
b = command_store()
puts b[0]
# Output:
# => Hello World
# => Hello World again
# => 66
# => Hello World
# => Hello World again
# => 16