查看: 3382|回复: 1

[已经解决] 请教initialize定义中有关new的用法(参考RPG自带的帮助教程)

[复制链接]
梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
发表于 2021-5-7 21:34:36 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 taeckle 于 2021-5-7 21:38 编辑

小弟这两天潜心学习RPG自带的帮助教程,小弟才疏学浅,基本看不懂这个教程在讲什么,比如教程里提到的对象初始化,教程原文是这样描述的:

------------------------------------------------------------------------------------------------------------------------------------------------------------
生成对象时,把实变量初始化为某个特定的值。先定义一个名称为 initialize 的方法,在使用 new 生成新实例时会自动调用该方法。

class Person
  def initialize
    @name = "无名先生"
  end
end

从第二行开始的 initialize 方法的定义,表示实变量 @name 的初始值被赋值为字符串 "无名先生"。这样,生成新的 Person 对象的时候,会自动以 "无名先生" 初始化实变量。

initialize 方法中设定有临时参数的情况下,new 会取该参数为初始值。


class Person
  def initialize(name)
    @name = name
  end
end

alex = Person.new("艾力克斯")

上述示例中,initialize 方法里设定有临时参数 name,那么实变量 @name 的初始值就会使用该参数。参数 name 实际在 Person 类 new 时给予。最后一行,生成 Person 类对象时指定参数为 "艾力克斯",那么 @name 的初始值也就设定为 "艾力克斯"。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
请问下像上面这样的类名称.new(Person.new)到底是啥意思?有哪些实战应用意义? 调用数据还是创建数据呢?还有这个alex变量要如何才能应用到游戏的大地图事件里呢?

还请诸位指点一二,不胜感激!
梦石
0
星屑
8003
在线时间
1184 小时
注册时间
2007-7-29
回帖
2014
发表于 2021-5-9 01:17:40 | 显示全部楼层
你必须的区分类(class)与对象(object)。
Person是类
Person.new是生成一个Person的对象。
就用你的例子
  1. alex = Person.new("艾力克斯")
复制代码

这时alex已经生成一个对象,你可以进行另一个对象生成。
  1. ali = Person.new("阿里")
复制代码

alex于ali都属于Person类但是是各自独立的对象。
比如:
  1. ali.name = "新阿里"
复制代码

ali重新赋予@name值可是alex的@name值并不会因此而改变,ali与alex完全独立。
至于你说的实战应用,其实rmxp脚本都是,与你的例子相近的属于Game_Battler,只是rm在Game_Battler下还细分Game_Actor与Game_Enemy子类。

评分

参与人数 2星屑 +70 赞 +1 收起 理由
RyanBern + 70 认可答案
taeckle + 1 大神威武!多谢了!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部