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

Project1

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

[已经解决] 我想问一下@实变量是什么意思?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
65
在线时间
389 小时
注册时间
2009-11-24
帖子
71
1
发表于 2015-1-1 17:17:31 | 显示全部楼层
本帖最后由 test 于 2015-1-1 18:20 编辑

如果不是很懂脚本,至少要先把基本的语法看懂。
不然的话没办法理解的……
因为面向对象的东西都是很抽象的。
比如类、对象、属性、方法……
RGSS里面没有属性这个东西,都是靠方法来模拟属性的。

为了说明简单地说明实例是什么东西,你就暂且把“类”看成是用来创造“对象”的东西。

>可是对象又是什么东西呢?
假如你是神,你可以创造世间万物。
这时,你创造的任何一个东西,都是一个对象。
你就把东西看成是一个对象就好了。(东西=对象)
无论是路边的石头、天上的小鸟、地上的小草……都是对象。

>怎么创造对象(东西)呢?
你说你觉得这个世界太平静了,那么我们就来创造人吧。
创造人之前,我们需要一个造人的模型(类)。
我们要来想象一下,人是什么。还有,你想让人拥有什么东西。
你说你只想让人具有生命值(hp)就好了。于是人就是这个样子:
RUBY 代码复制
  1. class People
  2.         def initialize()
  3.                 @hp = 100;
  4.         end
  5. end

这时候,造人的模型就做好了。
其中,人的生命值(@hp)就是楼主所问的实(例)变量。
变量的意思楼主应该知道了吧?就是会改变的量……

>那么实例是什么意思呢?
上面,人物的样子我们已经想象好了(上面的代码就是一个类),这就是人物的模型。但人物的模型是创造人用的,模型不是人,创造出来之后才是人。
造人的模型有了,可是这时候我们还没有创造出人物。所以这时候人还不存在。
这就需要我们创造。
这里的“实例”(动词)你就当成是“创造“的意思。
下面我们创造一个人物。
在上面的代码下面,新开一行加入一句:
RUBY 代码复制
  1. $p1 = People.new();

这样我们就创造了一个人(实例了一个人)。
这时候,我们可以把这个人叫做一个实例。
这里的“实例”(名词)你就当成是“创造出来的东西“的意思。

此时,这个人物被我们创造出来了,所以他就拥有了生命值(hp)这个实例变量。

抽象点来说,
东西(对象)创造(实例)之后才拥有的变量,叫做实例变量。
也就是说,不创造(实例)出来,这个实例变量就不存在。

很多东西可能我说得不是很准确,不知道楼主能理解其中的关系吗?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
389 小时
注册时间
2009-11-24
帖子
71
2
发表于 2015-1-1 18:55:47 | 显示全部楼层
本帖最后由 test 于 2015-1-1 22:35 编辑
欧买歌 发表于 2015-1-1 18:02
我也不知道


请试着理解下面代码:
RUBY 代码复制
  1. # 定义了一个全局变量$c,并使它的值等于333的函数。
  2. def x()
  3.         $c = 333; #全局变量
  4. end
  5.  
  6. # 测试用的类
  7. class Test
  8.  
  9.         #定义了一个类变量@@a,并使它的值等于111。
  10.         @@a = 111;
  11.  
  12.         #创建实例的时候,会执行这个函数↓
  13.         def initialize(b)
  14.                 @b = b; #定义了实例变量@b,并使它的值等于函数的参数b的值。
  15.         end
  16.  
  17.         #输出类变量@@a的值的函数
  18.         def say_a()
  19.                 p @@a;
  20.         end
  21.         #输出实例变量@b的值的函数
  22.         def say_b()
  23.                 p @b;
  24.         end
  25.         #输出全局变量$c的值的函数
  26.         def say_c()
  27.                 p $c;
  28.         end
  29.         #设置类变量@@a的值的函数
  30.         def set_a(v)
  31.                 @@a = v;
  32.         end
  33.         #设置实例变量@b的值的函数
  34.         def set_b(v)
  35.                 @b = v;
  36.         end
  37. end
  38.  
  39. # 创建两个测试类的实例$t1和$t2。并分别使它们的实例变量@b的值为'222-1'和'222-2'。
  40. $t1 = Test.new('222-1');
  41. $t2 = Test.new('222-2');
  42.  
  43. # ●测试全局变量
  44. # 在函数里使全局变量$c的值为333。
  45. x();
  46. # 使用$t1和$t2中的say_c函数输出全局变量$c的值。
  47. $t1.say_c(); # 输出的值为333
  48. $t2.say_c(); # 输出的值为333
  49. $c = 333; #改变全局变量$c的值为33301
  50. $t1.say_c(); # 输出的值为33301
  51. $t2.say_c(); # 输出的值为33301
  52.  
  53. # ●测试实例变量
  54. # 使用$t1和$t2中的say_b函数输出实例变量@b的值。
  55. $t1.say_b(); # 输出的值为222-1
  56. $t2.say_b(); # 输出的值为222-2
  57. $t1.set_b(444); # 使用$1中的say_b函数,使实例变量@b的值变成444。
  58. $t1.say_b(); # 输出的值为444
  59. $t2.say_b(); # 输出的值为222-2
  60.  
  61. # ●测试类变量
  62. # 使用$t1和$t2中的say_a函数输出类变量@@a的值。
  63. $t1.say_a(); # 输出的值为333
  64. $t2.say_a(); # 输出的值为333
  65. $t1.set_a(555); # 使用$t1中的say_a函数,使类变量@@a的值变成555。
  66. $t1.say_a(); # 输出的值为555
  67. $t2.say_a(); # 输出的值为555
  68.  
  69. # ●它们的区别就在于它们的有效范围,在范围外使用这个变量脚本会出错。
  70. # 全局变量从定义开始,在整个脚本里面任意的地方可以读取,改变它的值。
  71. # 实例变量在实例化之后,各个实例之间它们的值不会相互影响。
  72. # 类变量不实例化,在以这个类创建出来的每一个实例中共用。

点评

语法能看懂吗?比如变量的赋值以及函数的定义和调用之类的语法……  发表于 2015-1-1 19:46
脚本新手表示理解不能……  发表于 2015-1-1 19:10
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
389 小时
注册时间
2009-11-24
帖子
71
3
发表于 2015-1-1 22:13:28 | 显示全部楼层
本帖最后由 test 于 2015-1-1 22:31 编辑
欧买歌 发表于 2015-1-1 21:02
那么_变量又是什么鬼?


没注意看前面有个下划线...

点评

没见过这种类型的变量。但变量的名字可以以下划线开头…… _xxx就是一般的变量,$_xxx是全局变量,@_xxx是实例变量,@@_xxx是类变量。  发表于 2015-1-1 22:23
我说的是_变量,就是_后面的变量  发表于 2015-1-1 22:17
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-30 15:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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