ruby对象理解

 

ruby中一切皆对象。

对象本质乃一内存片段之存在,由其子片段之类型、长度、顺序来表征。子片段取值各异,则对象各异。对象之方法定义了对内存片段中每个子片段可运用的运算集合。所以说对象是带有函数的数据。方法只需要用@offset来引用子片段(属性),无需知道名称,名称只是给人辨识的。

对象从何而存在?如何在内存中创建特定的类型、长度和顺序?此种信息即包含在类定义中。类也是对象,它通过对象的内存布局信息(对象模型)来分配内存(new方法),然后让对象自己用initialize方法填写子片段的值。虽然class XXX是一个大写的名字,但是这只是表明XXX是一个常量引用,其实它就是引用到了一个类对象。虽然类的实例叫对象,但既然类也是对象,这里为了区别起见,把对象和类分别叫做实例对象和工厂对象,因为类的表现就跟工厂方法一样。实例对象的class属性记录它是被哪个工厂对象造出来的。工厂对象自己又是被上层对象创造出来的,这个对象叫Class,它的产品都是工厂对象。工厂还知道自己定义的方法都是哪些,哪些是未定义的,方法的可访问性等。

class C; end

a=C.new

#[a,a.class,C.class,C.class.new,C.class.new.new].each {|x| p x,x.methods.sort!}          第一个和最后一个是实例对象,其他都是工厂对象

p a.methods.sort!

p a.methods-C.class.new.new.methods

p C.class.methods-a.class.methods

p a.class.methods-C.class.new.methods

p C.class.methods-a.methods

 

打印结果如下:

 

[:!, :!=, :!~, :==, :===, :=~, :__id__, :__send__, :class, :clone, :define_singleton_method, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :gem, :hash, :inspect, :instance_eval, :instance_exec, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :kind_of?, :method, :methods, :nil?, :object_id, :private_methods, :protected_methods, :public_method, :public_methods, :public_send, :respond_to?, :send, :singleton_methods, :taint, :tainted?, :tap, :to_enum, :to_s, :trust, :untaint, :untrust, :untrusted?]  表明基对象的方法,注意id、send、很多的比较操作符、hash等。

[]  说明无新的方法

[:nesting] Class对象的方法比普通的工厂对象多一个nesting

[]  这2个工厂对象也是一样的

[:nesting, :constants, :allocate, :new, :superclass, :<=>, :<, :<=, :>, :>=, :included_modules, :include?, :name, :ancestors, :instance_methods, :public_instance_methods, :protected_instance_methods, :private_instance_methods, :const_get, :const_set, :const_defined?, :const_missing, :class_variables, :remove_class_variable, :class_variable_get, :class_variable_set, :class_variable_defined?, :module_exec, :class_exec, :module_eval, :class_eval, :method_defined?, :public_method_defined?, :private_method_defined?, :protected_method_defined?, :public_class_method, :private_class_method, :autoload, :autoload?, :instance_method, :public_instance_method]  表明工厂对象比实例对象多很多元信息


不对理解正确性负责!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值