免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 12982 | 回复: 5
打印 上一主题 下一主题

闭包里的块变量能传到闭包外吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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有办法穿过作用域传到闭包外吗?

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
2 [报告]
发表于 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

论坛徽章:
0
3 [报告]
发表于 2013-10-24 17:30 |只看该作者
回复 2# bikong0411

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

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


   

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
4 [报告]
发表于 2013-10-24 21:41 |只看该作者
回复 3# alinunix


    那样的话,你说的根本不可能,因为局部作用域

论坛徽章:
0
5 [报告]
发表于 2013-10-25 14:40 |只看该作者
bikong0411 发表于 2013-10-24 21:41
回复 3# alinunix


嗯,可能是这样的,呵呵,我也只是问问。

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
6 [报告]
发表于 2013-10-25 16:48 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP