幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 6051|回复: 7

[其他] RUBY怎么判断对象是什么类阿?

[复制链接]

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2009-3-11 07:29:59 | 显示全部楼层 |阅读模式
是这样。。。

比如RM有个
Game_Character
Game_Event < Game_Character
Game_Player < Game_Character
3个类

弄个数组或者是hash
存储这3个类
怎么判断已经存储进的元素是哪个类的呢?
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2009-3-11 11:57:56 | 显示全部楼层
首先,Ruby里有duck type的惯用法,不需要判断对象是什么类的,只要通过respond_to?来判断是否能响应某种消息就行。
其次,非要判断Ruby对象的类型的话,用class方法,像:
obj = Object.new
obj.class #=> Object
obj.class == Object #=> true
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-3-11 12:17:51 | 显示全部楼层
3Q....受教了
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2009-3-11 12:21:14 | 显示全部楼层
在写些什么东西呢?我最近真是太无聊了……虽然也很忙但感觉好无聊
话说怎么称呼楼主好?叫我FX吧。
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2009-3-11 12:37:12 | 显示全部楼层
为krkr2写个RPG框架吧。
目标是把在RMXP(RMXVX)中做好的游戏导入到那个框架中,便可以直接运行。
ruby&tjs都是你的长项啊。     
え~え~お!!!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-3-11 12:39:28 | 显示全部楼层
别人都叫我二手君或者是小s

我就用RM捣鼓点东西,感觉就先搭积木。。。嗯。。。

我还有个问题,单例类是什么呢?我看书怎么看都理解不能。。
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2009-3-11 15:51:06 | 显示全部楼层
你说的单例类是指Singleton而不是singleton class是吧?Ruby里面singleton这词至少有两种意思:

一种是跟设计模式里的单例模式一样,就是说如果一个类是一个单例,那么它就最多只能有一个实例。Ruby里要把自己的类写成单例的只要include Singleton就行。不要忘记require 'singleton'。单例类的new方法是private的,所以你不能用new来创建新的实例,只能通过instance方法来得到唯一的一个实例。

另一种是指某个类的某个实例对象可以拥有它自己的版本的方法,像这样:
(下面是一段irb session)
  1. irb(main):001:0> class Foo
  2. irb(main):002:1>   attr_accessor :bar
  3. irb(main):003:1> end
  4. => nil
  5. irb(main):004:0> foo = Foo.new
  6. => #<Foo:0x304094>
  7. irb(main):005:0> class << foo
  8. irb(main):006:1>   def greet
  9. irb(main):007:2>     puts 'Hey there'
  10. irb(main):008:2>   end
  11. irb(main):009:1> end
  12. => nil
  13. irb(main):010:0> foo.greet
  14. Hey there
  15. => nil
  16. irb(main):011:0> goo = Foo.new
  17. => #<Foo:0x3580888>
  18. irb(main):012:0> goo.greet
  19. NoMethodError: undefined method `greet' for #<Foo:0x3580888>
  20.         from (irb):12
  21.         from :0
复制代码
就是说foo这个Foo的实例有greet方法,而goo同样是Foo的实例却没有greet方法。foo自己就有一个“singleton class”跟它关联着。效果上就像是Foo是某个隐藏的类的实例(而不直接是Foo的实例)一般,这个“隐藏的类”继承自Foo并增添了相关的方法。注意我是说“效果上”……
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-3-11 16:18:12 | 显示全部楼层
我似乎是明白了。。。。3Q
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-20 14:00 , Processed in 0.019780 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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