查看: 1280|回复: 5

关于循环体内赋值的问题。

  [复制链接]
梦石
0
星屑
65
在线时间
433 小时
注册时间
2007-5-1
回帖
949
发表于 2009-2-7 01:58:31 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
先看两段脚本:

loop do
x = rand(123)
break if x > 50
end
p x

出错,说是未定义变量x。

x = 0
loop do
x = rand(123)
break if x > 50
end
p x

通过,为什么……

以下是群里某位成员的解释:

循环-显示x(还在循环,x的数值在这时候还没大于50的话就一直在循环没有一个确定数值,所以无法赋值),所以 当显示 x的时候 因为 x还处于不断的循环状态`
那么 就无法确定x的确切值,所以就出错了`

因为在循环里条件分歧非实例类貌似会被无视- -`


理解不能……求详细点的解释,谢谢!


版务信息:本贴由楼主自主结贴~

嗯,不能浪费签名了,打广告。本人的悲剧作品:
坑化游戏《龙之影》      R剧《星空》     小游戏《剑与拳头》
梦石
0
星屑
50
在线时间
93 小时
注册时间
2008-5-16
回帖
705
发表于 2009-2-7 02:19:35 | 显示全部楼层
判断式先执行,所以第一个写法,判断之前X没有定义
第2个写法,X先定义,然后进行判断。
回复

使用道具 举报

梦石
0
星屑
65
在线时间
433 小时
注册时间
2007-5-1
回帖
949
 楼主| 发表于 2009-2-7 02:44:47 | 显示全部楼层
以下引用★_茄孓于2009-2-6 18:19:35的发言:

判断式先执行,所以第一个写法,判断之前X没有定义
第2个写法,X先定义,然后进行判断。


呃……MS不是这样的,因为我试过在第一段脚本的循环体内写p 'a',结果执行了p 'a'然后出错,说明的确是执行了循环体里的内容。而且提示出错的行是最后的 p x

嗯,不能浪费签名了,打广告。本人的悲剧作品:
坑化游戏《龙之影》      R剧《星空》     小游戏《剑与拳头》
回复

使用道具 举报

梦石
0
星屑
50
在线时间
93 小时
注册时间
2008-5-16
回帖
705
发表于 2009-2-7 02:48:34 | 显示全部楼层
我想应该你应该去看看秀大的教程
类空间,对象空间那一章
我说的不是很明白
应该是两个x属于不同空间,所以不一样?
把x变为@x即可
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
回帖
2407

第1届Title华丽大赛新人奖

发表于 2009-2-7 02:59:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

梦石
0
星屑
65
在线时间
433 小时
注册时间
2007-5-1
回帖
949
 楼主| 发表于 2009-2-7 05:45:29 | 显示全部楼层
以下引用沉影不器于2009-2-6 18:59:46的发言:

只能说x的作用域只在loop...end内...

我确定了一下,ruby的局部变量作用域起始于声明处,结束于该声明所在的块、方法定义、类/模块定义的结尾,这里的loop...end就是块

[本贴由作者于 2009-2-6 19:06:12 最后编辑]


的确是作用域问题,没想到一个循环体也能把变量封装起来……

嗯,不能浪费签名了,打广告。本人的悲剧作品:
坑化游戏《龙之影》      R剧《星空》     小游戏《剑与拳头》
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部