Ruby保护块内的外部变量

时间:2014-07-13 13:17:28

标签: ruby block

让我们说方法:

def in_block
  x = "This variables outer block"
  3.times do |i|
    x = i
    puts "x inside block - #{x}"
  end
  puts x
end
in_block

# >> x inside block - 0
# >> x inside block - 1
# >> x inside block - 2
# >> 2

我如何保护x变量?

1 个答案:

答案 0 :(得分:4)

以分号;分隔块中的参数,这表示该块需要自己的x,与已在块外部创建的任何x无关。

def in_block
  x = "This variables outer block"
  3.times do |i; x|
    x = i
    puts "x inside block - #{x}"
  end
  puts x
end
in_block

# >> x inside block - 0
# >> x inside block - 1
# >> x inside block - 2
# >> This variables outer block

但简单,怎么样?它不一样。看一下这个块有两个参数的例子:

def in_block
  #x = "This variables outer block"
  [1,2,3,4].each_with_index do |i; x|
  puts x.class
    x = i
    puts "x inside block - #{x}"
  end
  #puts x
end

in_block # => [1, 2, 3, 4]

# >> NilClass
# >> x inside block - 1
# >> NilClass
# >> x inside block - 2
# >> NilClass
# >> x inside block - 3
# >> NilClass
# >> x inside block - 4

,

def in_block
  #x = "This variables outer block"
  [1,2,3,4].each_with_index do |i, x|
  puts x.class
    x = i
    puts "x inside block - #{x}"
  end
  #puts x
end

in_block # => [1, 2, 3, 4]

# >> Fixnum
# >> x inside block - 1
# >> Fixnum
# >> x inside block - 2
# >> Fixnum
# >> x inside block - 3
# >> Fixnum
# >> x inside block - 4