Chinaunix

标题: 闭包里的块变量能传到闭包外吗? [打印本页]

作者: alinunix    时间: 2013-10-23 14:13
标题: 闭包里的块变量能传到闭包外吗?
def check_status
     (1..5).each do |x;sign|
             ......
             sign = 1
     end
     return sign
end

check_status

test.rb:7:in `check_status': undefined local variable or method `sign' for main:Object (NameError)
        from test.rb:10:in `<main>'

如果闭包外没有定义sign,return是就会报错,闭包里的局部变量sign有办法穿过作用域传到闭包外吗?


作者: bikong0411    时间: 2013-10-24 09:40
[3] pry(main)> def test()
[3] pry(main)*   sign=0
[3] pry(main)*   (1..5).each {|x|
[3] pry(main)*     sign = 1
[3] pry(main)*   }  
[3] pry(main)*   sign
[3] pry(main)* end  
=> nil
[4] pry(main)> test()
=> 1
作者: alinunix    时间: 2013-10-24 17:30
回复 2# bikong0411

这个还是相当于在闭包外先定义了sign,所以闭包里的sign已经不是局部变量了。

我想问的是闭包里的局部变量有什么方法能传出来吗?


   
作者: bikong0411    时间: 2013-10-24 21:41
回复 3# alinunix


    那样的话,你说的根本不可能,因为局部作用域
作者: alinunix    时间: 2013-10-25 14:40
bikong0411 发表于 2013-10-24 21:41
回复 3# alinunix


嗯,可能是这样的,呵呵,我也只是问问。
作者: Sevk    时间: 2013-10-25 16:48
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2