设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1359|回复: 2
打印 上一主题 下一主题

[已经解决] 求助关于实变量的问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
170
在线时间
0 小时
注册时间
2009-10-20
帖子
3
跳转到指定楼层
1
发表于 2009-10-20 22:31:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 额滴神啊 于 2009-10-20 22:40 编辑

刚刚入门,对游戏脚本很感兴趣,于是就开始看F1(RMXP自带的那个RGSS教程),前面都还好,就是到实变量这里看不太懂,F1对实变量的解释实在是少的要死,就只有一下两行字。其实,我还没搞懂什么是实变量,F1里面说通常作为对象的属性,这个是不是和精灵图的Bitmap属性类似呢?还有哈,为什么局部变量只有在 def ~ end 等结构内部使用时才有效?在for in~end结构或者while~end或者if~else~end结构不是也可以用吗?难道说局部变量有什么弊端?以下是F1原文:
属于个体对象的变量称为实变量。名称以 @ 开头的变量,自动作为实变量使用。局部变量只有在 def ~ end 等结构内部使用时才有效,然而使用实变量的话,只要其对象存在,变量的值就会被保存。实变量一般作为对象的属性来使用。


啊 对不起各位哈,刚刚忘了搜索功能,当了一次伸手党,在这里道歉了,不过还是有点问题,原来帖子修改过了 谢谢各位帮忙先。

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
2
发表于 2009-10-20 22:55:01 | 只看该作者
本帖最后由 紫苏 于 2009-10-21 00:25 编辑

其实叫“实变量”容易引起歧义,比如用惯了 Pascal 的人可能还以为是在说 Real 型的浮点变量,最好称之为“实例变量”~这个可以参考:
http://rpg.blue/viewthread.php?tid=124591

至于局部变量,F1 里面的说法也不太准确……局部变量当然不一定都是在 def ... end 中的,只要是由 ASCII 字符中大写字母 [A-Z] 以外的有效字符打头的标示符,在任何地方被首次赋值定义都会被认为是局部变量~
一个局部变量会在第一次被赋予一个值时动态地被创建,但是其作用域却是静态地决定为直接包围它的代码块,也就是方法定义(def ... end)、类定义(class ... end)、模块定义(module ...end)以及顶层的程序的其中一个。举个例子:
  1. t = Thread.new {
  2.   a = 4
  3.   Thread.stop
  4.   p a                  # 线程内部定义的局部变量
  5. }

  6. a = 0
  7. module M
  8.   a = 1
  9.   class C
  10.     a = 2
  11.     def self.fn
  12.       a = 3
  13.       p a              # 函数定义内部的局部变量 => 3
  14.     end
  15.     fn
  16.     p a                # 类定义内部的局部变量 => 2
  17.   end
  18.   p a                  # 模块定义内部的局部变量 => 1
  19. end
  20. p a                    # 顶层定义的局部变量 => 0

  21. t.run                  # => 4
复制代码
相同名称的局部变量如果分别是在不同的上下文中定义的,那么它们的本身也就是不同的变量,指向不同的值,这就是作用域的区别~
比较特殊的情况就是线程的局部变量,如果一个局部变量是在线程中首次赋值定义的,那么它的作用域就在这个线程中,并且独立于外部的局部变量;如果同名的局部变量在线程外就已经被赋值过了,那么线程将会继承这个外部的局部变量,换句话说就是这个局部变量仍然是外部的那个变量,而不是局部于线程的变量
至于你说的 for ... end、while ... end 和 if ... else ... end,这个是可以被包含在 def ... end 等上述的五种代码块中的,并且即便它是在这些控制块里首次赋值定义的局部变量,其作用域还是外层的上述五种代码块之一,比如:
  1. def fn
  2.   while true
  3.     if true
  4.       for i in 0..0
  5.         begin
  6.           a = 99
  7.         end
  8.       end
  9.     end
  10.     break
  11.   end
  12.   p a             # => 99
  13. end

  14. fn
复制代码
a 在所有控制语句的外部仍然是可见的,这一点和其它很多语言就不一样了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
170
在线时间
0 小时
注册时间
2009-10-20
帖子
3
3
 楼主| 发表于 2009-10-21 12:24:19 | 只看该作者
哇!好详细,谢谢紫苏了~
细心研究去了~~
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-30 03:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表