Project1

标题: 关于循环体内赋值的问题。 [打印本页]

作者: 水镜风生    时间: 2009-2-7 01:58
标题: 关于循环体内赋值的问题。
先看两段脚本:

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的确切值,所以就出错了`

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


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

[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: ★_茄孓    时间: 2009-2-7 02:19
判断式先执行,所以第一个写法,判断之前X没有定义
第2个写法,X先定义,然后进行判断。
作者: 水镜风生    时间: 2009-2-7 02:44
以下引用★_茄孓于2009-2-6 18:19:35的发言:

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


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

作者: ★_茄孓    时间: 2009-2-7 02:48
我想应该你应该去看看秀大的教程
类空间,对象空间那一章
我说的不是很明白
应该是两个x属于不同空间,所以不一样?
把x变为@x即可
作者: 沉影不器    时间: 2009-2-7 02:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水镜风生    时间: 2009-2-7 05:45
以下引用沉影不器于2009-2-6 18:59:46的发言:

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

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

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


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





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1