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

Project1

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

关于【模块】的相关问题

 关闭 [复制链接]

Lv4.逐梦者

梦石
0
星屑
6875
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

跳转到指定楼层
1
发表于 2009-5-2 10:28:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
第一次接触【模块】
遇到一点点问题
新定义的一个模块里定义的一个方法
module HZHJ
  def h_fire
  end
end
这样定义以后在公共事件里的脚本调用 HZHJ.h_fire
会发生错误 说HZHJ module没有定义h_fire
这是为什么呢?
然后我重新写了下方法的定义
module HZHJ
  def HZHJ.h_fire
  end
end
这样写的话就没有出错了,这是为什么呢
模块本身也是一个对象,我第一次定义的为什么会出错呢?











你知道得太多了

Lv1.梦旅人

梦石
0
星屑
120
在线时间
68 小时
注册时间
2007-12-16
帖子
75
2
发表于 2009-5-2 11:11:33 | 只看该作者
可以看看  RMXP技術版  的  秀秀之走火入魔的高级脚本教程
http://rpg.blue/viewthread.php?tid=108581
這裡有詳細說明

在Ruby中
(模組Moudle本身也是個類Class)
def xxxxx
均為對象"副本"的方法
所以無法直接調用
class xxx
  def self.xxx

def xxx.xxx
這些為類的方法
一定要直接調用



這種問題不是只有在模組中才會有
在類中也會有這種問題
moudle A
  def a
  end
  def self.b
  end
end
calss B
  def a
  end
  def self.b
  end
end

當調用
A.a # 報錯
A.b # 正常
同樣的
調用
B.a # 報錯
B.b # 正常
但是當
b = B.new
b.a # 正常
b.b # 報錯
版主对此帖的认可:『唉……』,积分『+500』。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
3
发表于 2009-5-2 12:11:29 | 只看该作者
楼上说的很正确,不过还是忍不住想补充下:
模块本身是一个抽象的数据结构,不是一个具体的对象~
这两种不同的方法定义方式其实就分别定义了静态方法和动态方法——
静态方法属于类/模块本身,在整个程序的生命周期中只会初始化一次,可以在不同的对象实例之间共享,所以可以通过类/模块名字空间直接引用;
动态方法属于类/模块的实例,每次建立一个新的对象时都会为其分配新的空间,所以又称为实例方法,需要通过一个实例才能引用~
模块的实例方法比较特殊,因为模块本身不可实例化,所以主要是用于模块和类的混入时,导入模块的实例方法供类使用的:
module A
   def aaa
     p 1
   end
end

class B
   include A    # B 类包含模块 A 的数据
end

B.new.aaa      # 通过 B 的实例调用 aaa 方法

为什么要分成静态和动态呢?
以上是抽象定义,可能不太好理解,举个形象点的例子吧~
有一个类叫 [Person],我们想给 Person,也就是人,添加一些基本的行为: [eat]、[sleep]、[cry]、[smile],但是张三、李四、其他每个人都有不同的吃法、睡法、哭法、笑法,并且这些行为直接影响的是他们自己~所以我们把这些行为都定义为实例方法,针对不同的人的实例(对象)都有一份属于实例自己的行为拷贝……

我们还想定义一个方法,这个方法描述人类是一种什么样的生物,但由于这里我们是针对“人”这个抽象的集合(人“类”),而不是针对某个人的实例,比如张三、李四,所以我们把这个描述人的方法定义为 [Person] 类的静态方法:
class Person
   def Person.description
     return "人,属于哺乳纲灵长目人科人属智人种。"
   end
end
之后直接通过“人”这个抽象概念来调用这个方法:
p "Q:人是一种什么动物?"
p "A:" + Person.description

系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-20
帖子
258
4
发表于 2009-5-2 15:52:14 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6875
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

5
 楼主| 发表于 2009-5-4 03:07:26 | 只看该作者
哦哦,明白了!谢谢!
danny8376

紫苏

版主帮忙结下帖,谢谢了!











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人


梦石
0
星屑
89
在线时间
24 小时
注册时间
2006-5-27
帖子
11425

贵宾

6
发表于 2009-5-4 03:25:38 | 只看该作者
以下引用后知后觉于2009-5-3 19:07:26的发言:
版主帮忙结下帖,谢谢了!
为啥要我帮忙结贴- -
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6875
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

7
 楼主| 发表于 2009-5-4 03:49:15 | 只看该作者
我自己结帖不是只能认证一个人的答案的啊
那2位的回答都很好啊....











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人


梦石
0
星屑
89
在线时间
24 小时
注册时间
2006-5-27
帖子
11425

贵宾

8
发表于 2009-5-4 03:52:16 | 只看该作者
以下引用后知后觉于2009-5-3 19:49:15的发言:
我自己结帖不是只能认证一个人的答案的啊
那2位的回答都很好啊....
你就那么不舍得追加点积分啊?
看你也不是缺分的人啊- -

自己追点分,一个点部分认可,另一个点认可答案。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6875
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

9
 楼主| 发表于 2009-5-4 04:03:15 | 只看该作者
这样的操作我没弄过- -!
反正认证了一个 另外一个就没有认证的按钮了











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人


梦石
0
星屑
89
在线时间
24 小时
注册时间
2006-5-27
帖子
11425

贵宾

10
发表于 2009-5-4 04:08:24 | 只看该作者
以下引用后知后觉于2009-5-3 20:03:15的发言:
这样的操作我没弄过- -!
反正认证了一个 另外一个就没有认证的按钮了
全部分数部分认可,你不追加分让系统追加啊?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-15 23:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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