站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Ruby-局部变量
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
<span style="text-align:center; border:1px solid #000; float:right; padding:6px;"><strong>导航:</strong> [[Ruby学习教程#Ruby学习教程|上一页]] | {{template:开发语言导航}}</span> <div style="clear:both;"></div> 局部变量由小写字母或下划线(_)开头.局部变量不像全局和实变量一样在初始化前含nil值. <br> ruby> $foo<br> nil<br> ruby> @foo<br> nil<br> ruby> foo<br> ERR: (eval):1: undefined local variable or method `foo' for main(Object) <br> 对局部变量的第一次赋值做的很像一次声明.如果你指向一个未初始化的局部变量,Ruby解释器会认为那是一个方法的名字;正如上面所见错误 信息的.<br> 一般的,局部变量的范围会是<br> proc{...} <br> loop{...} <br> def...end <br> class...end <br> module...end <br> 整个程序(除非符合上面某个条件)<br> 下面的例子,define?是一个检查标识符是否已定义的操作符.如果已定义它将返回标识符的描述,否则返回nil.正如你所见的,bar的范围是<br> loop的局部变量;当loop退出时,bar无定义.<br> ruby> foo = 44; print foo, "\n"; defined? foo<br> 44<br> "local-variable"<br> ruby> loop{bar=45; print bar, "\n"; break}; defined? bar<br> 45<br> nil <br> 一个范围内的过程对象共享这个范围内的局部变量.这里,局部变量 bar 由 main 和过程对象 p1, p2共享:<br> ruby> bar=0<br> 0<br> ruby> p1 = proc{|n| bar=n}<br> #<Proc:0x8deb0><br> ruby> p2 = proc{bar}<br> #<Proc:0x8dce8><br> ruby> p1.call(5)<br> 5<br> ruby> bar<br> 5<br> ruby> p2.call<br> 5 <br> 注意开始的"bar=0"不能省略;此赋值允许bar的范围被 p1和 p2共享.不然 p1, p2 将会分别生成并处理它们自己的局部变量 bar, 调用 p2 也将导致"未定义局部变量或方法"错误.<br> 过程对象的强大在于它们能被作为参数传递:共享的局部变量即使传递出原范围也仍然有效.<br> ruby> def box<br> | contents = 15<br> | get = proc{contents}<br> | set = proc{|n| contents = n}<br> | return get, set<br> | end<br> nil<br> ruby> reader, writer = box<br> [#<Proc:0x40170fc0>, #<Proc:0x40170fac>] <br> ruby> reader.call<br> 15<br> ruby> writer.call(2)<br> 2<br> ruby> reader.call<br> 2 <br> Ruby对待范围的办法相当聪明.显然,上面例子里 contents 变量是由 reader 和 writer 共享的.我们也可以像上面那样创造多对使用box的<br> reader-writer;每一对共享一个 contents 变量,对之间不相干扰.<br> ruby> reader_1, writer_1 = box<br> [#<Proc:0x40172820>, #<Proc:0x4017280c>]<br> ruby> reader_2, writer_2 = box<br> [#<Proc:0x40172668>, #<Proc:0x40172654>]<br> ruby> writer_1.call(99)<br> 99<br> ruby> reader_1.call<br> 99<br> ruby> reader_2.call<br> 15 <br> [[category:Ruby学习教程]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
模板:开发语言导航
(
编辑
)