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

Project1

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

超级新人请教的脚本问题 F1里面有东西没看懂……

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
315
在线时间
0 小时
注册时间
2009-5-10
帖子
2
跳转到指定楼层
1
发表于 2009-5-10 14:14:45 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
刚刚接触RMXP  刚刚学脚本
RMXP的F1里面的基础篇有“实变量”模块,这个模块的范例没看懂,请各位帮忙“详细”解释下,谢谢了…………
  1. class Person
  2.   def name
  3.     return @name
  4.   end
  5.   def name=(name)
  6.     @name = name
  7.   end
  8.   def hello
  9.     print "我是" + @name + ""
  10.   end
  11. end

  12. alex = Person.new
  13. alex.name = "艾力克斯"
  14. alex.hello                  # => 我是艾力克斯
复制代码


上面那个就是F1里面的脚本,前面都看完了,卡在这个地方,不想半途而废,请各位高手指点,最好每句话都解释下  end就不用揭示了 def也不用 print也不用…………
版务信息:版主帮忙结贴~

Lv1.梦旅人

梦石
0
星屑
315
在线时间
0 小时
注册时间
2009-5-10
帖子
2
4
 楼主| 发表于 2009-5-25 04:29:54 | 只看该作者
谢谢~~~非常谢谢~~~~~~~发疯似的谢谢~~~~~~~~~~~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
3
发表于 2009-5-10 15:02:49 | 只看该作者
是实例变量~

所谓实例变量就是属于一个具体对象的变量,比如张三的体重,李四的体重,王五的体重,这些都可以说是定义在 Person (人)类中的实例变量,因为每个人的实例都有自己的一份体重变量(张三可能只有六十斤,李四却可能有八十斤)~

实例变量听起来可能很抽象,但把它看作一个对象的属性可能就比较容易理解了,名字、DNA、三围、血压这些都是属于一个具体的人的属性

这段脚本中就定义了一个类,类的名字叫人,于是我们把它称作“人”类……
class Person
end

但这样仅仅是一个抽象的空框架,它现在没有任何属性,即便实例化之后该对象也没有任何意义 =(
我们之所以要设计一个类,是因为我们经常反复用到一些抽象数据的实例,这些实例之间共享一些相同的特性,比如是“人”都应该有一个名字,于是我们在这个类中定义一个实例变量 @name,用来保存每个具体的人的名字~

但这里有个问题——任何实例变量或者类变量的访问权限都是私有的,所以在类的外部无法直接访问。如果我们要想在类的外部访问这个实例变量,就需要定义一个公有访问权限的方法来获取和修改这个属性。所以这里在“人”类中定义了两个方法,一个用来获取 @name(def name),一个用来修改 @name(def name=)

name 方法的内容很简单,直接 return 把 @name 的值返回给调用者,所以当用“人”类的一个对象直接调用 name 方法时,该方法就能够把 @name 这个实例变量返回给调用者使用;name= 这个方法则是把 @name 的值赋为调用者传递给 name= 的参数(括号中的 name,可以看作一个临时/局部变量)……这种方法名称的定义是 Ruby 的特性之一,虽然方法名是 “name=”,但实际上在调用时等号“=”左右可以包含空格符,而后面的参数括号也是可以省略的,所以调用的时候 obj.name = "张三" 这种形式看起来像是在直接操作一个属于 obj 的属性 name,但实际上是利用了 name= 函数来操作内部的 @name 变量~

最后,在“人”类中还定义了一个方法 Hello,我们可以把它看作一个行为,这个行为就是普通“人”都应该会的一个行为——自我介绍~
这个行为会输出一段文字,让别人知道这个“人”的实例的名字,如果之前用 name= 给 @name 赋了一个 "张三",这里就会输出“我是张三”,因为在赋值的时候 "张三" 被保存到了实例变量 @name 中,而 hello 方法又把这个变量的内容打印了出来~

到此为止一个“人”类的最基本的属性和行为(名字和自我介绍)就定义完毕了,下面三行就是实际生成一个名字叫艾力克斯的“人”的对象:
alex = Person.new
alex.name = "艾力克斯"
alex.hello
首先调用了类的一个静态方法 new,实例化一个“人”的对象,并把这个对象的地址保存在了一个局部引用变量 alex 中;
之后就可以通过 alex 这个引用变量来访问之前生成的这个“人”的对象,于是我们调用 name= 方法给这个人起了个名字“艾力克斯”;
名字起了,这个人还能干啥呢?哦,他还会打招呼,那我们就让他打招呼吧:“小伙子,自我介绍下~”于是调用“他”的 hello 方法,输出了一段文字:“我是艾力克斯”……

……
版主对此帖的认可:『辛苦你了,请再接再厉...』,积分『+350』。
系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-28
帖子
232
2
发表于 2009-5-10 14:54:24 | 只看该作者
这也是我一直没弄懂的地方,没用PRINT就能显示出来吗?
站内搜索 http://rpg.blue/forumSearch.asp
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-15 06:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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