secondsen 发表于 2009-3-11 07:29:59

RUBY怎么判断对象是什么类阿?

是这样。。。

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

弄个数组或者是hash
存储这3个类
怎么判断已经存储进的元素是哪个类的呢?

rednaxela 发表于 2009-3-11 11:57:56

首先,Ruby里有duck type的惯用法,不需要判断对象是什么类的,只要通过respond_to?来判断是否能响应某种消息就行。
其次,非要判断Ruby对象的类型的话,用class方法,像:
obj = Object.new
obj.class #=> Object
obj.class == Object #=> true

secondsen 发表于 2009-3-11 12:17:51

3Q....受教了

rednaxela 发表于 2009-3-11 12:21:14

在写些什么东西呢?我最近真是太无聊了……虽然也很忙但感觉好无聊
话说怎么称呼楼主好?叫我FX吧。

shawind 发表于 2009-3-11 12:37:12

为krkr2写个RPG框架吧。
目标是把在RMXP(RMXVX)中做好的游戏导入到那个框架中,便可以直接运行。
ruby&tjs都是你的长项啊。

secondsen 发表于 2009-3-11 12:39:28

别人都叫我二手君或者是小s

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

我还有个问题,单例类是什么呢?我看书怎么看都理解不能。。

rednaxela 发表于 2009-3-11 15:51:06

你说的单例类是指Singleton而不是singleton class是吧?Ruby里面singleton这词至少有两种意思:

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

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

secondsen 发表于 2009-3-11 16:18:12

我似乎是明白了。。。。3Q
页: [1]
查看完整版本: RUBY怎么判断对象是什么类阿?