【问题标题】:Ruby protect outer variable inside block [duplicate]Ruby保护块内的外部变量[重复]
【发布时间】:2014-07-13 13:17:28
【问题描述】:

假设有方法:

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 变量?

【问题讨论】:

    标签: ruby block


    【解决方案1】:

    用分号;分隔块中的参数,这表明该块需要自己的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
    

    【讨论】:

      猜你喜欢
      • 2012-03-27
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 2013-03-23
      • 2021-06-10
      相关资源
      最近更新 更多