ruby之超类 Object

所有类的超类,它定义了对象的一般行为

包含的模块:

. Kernel

 方法:

self == other

         若 self 等于 other 则返回真,默认情况下,它的效果等同于equal? 


  self =~ other

该方法可支持将正则表达式对象置于右边的,形如 obj =~ /RE/ 的正则表达式的匹配过程.通常返回false.

根据此定义,例如

nil =~ /re/
通常返回 false .


self === other

该方法通常用在case的比较句中.默认情况下,它的运作等同于Object#==,但在子类中进行归属检测时,需要对其进行适当的再定义.


class 类:


type ((<obsolete>))

返回被调(receiver)的类.

ruby 1.7 特性: 在1.7 版本中,type已被停用.

clone

dup

生成某对象的拷贝并返回它.

clone生成的是完整的拷贝,它包括freezetaint和特殊方法等信息; 而dup则只拷贝对象的内容.

请注意,clone 和 dup 生成的都是"浅层(shallow)"拷贝.它们只拷贝对象本身,而不会拷贝对象的所指(例如数组的元素等).

另外,如果对拷贝进行如下测试的话

obj.equal?(obj.clone)

通常都不成立.但是

obj == obj.clone

通常都会成立.

若想对truefalsenilSymbol对象等进行拷贝时,会引发TypeError异常.

ruby 1.7 特性: 在1.7版本中,若想对Numeric对象等immutable(内容不可改变)的对象进行拷贝时,会引发TypeError.

display(out = $stdout)

将对象输出到 out. 其定义如下.

class Object
  def display(out=$stdout)
    out.print to_s
    nil
  end
end

返回nil.

eql?(other)

若两个对象相等则返回真.常用来判断Hash中的两个索引是否相同.

在对该方法进行再定义的同时,也必需对Object#hash方法进行再定义.

默认情况下,eql?的定义与equal?相同,即判断对象的同一性.

equal?(other)

other就是self自己时,即返回真.

该方法不能再定义.

extend(module...)

将参数所指模块的实例方法追加为self的特殊方法.返回self.

include负责向类(的实例)追加功能,而extend则只向某特定的对象追加模块的功能.

module Foo
  def a
    'ok'
  end
end

obj = Object.new
obj.extend Foo
p obj.a         #=> "ok"

换言之,extend的功能就是"面向特殊类的include".

ruby 1.7 特性: 若参数中包含了多个模块时,将从最后最后的参数开始逆向进行extand.

freeze

禁止修改对象的内容.返回self.

若强行修改则会引发TypeError异常.

frozen?

若某对象禁止修改其内容则返回真.

hash

返回对象的哈希表值.用来在Hash类中保存对象.

A.eql?(B)成立时,则A.hash == B.hash也必须成立.若再定义eql?时,也必须对该方法进行再定义.

默认情况下,它的返回值与Object#id的返回值相同.但是,只有Fixnum,SymbolString使用内部哈希表函数(不可改变).

再定义hash时,将返回任意整数.

id((<obsolete>))

_ _id_ _

object_id 

返回与各个对象对应的唯一的整数.但是,为某对象分配整数的具体情形并不固定.

为了应对您对id方法进行再定义,Ruby提供了别名__id__,我们推荐您在库中使用后者.另外,请不要对__id__进行再定义.

ruby 1.7 特性: 在1.7版本中,id已被停用.

inspect

将某对象转为人工可读的字符串并返回该字符串.

内部函数p就是使用该方法来表示某对象的.


instance_eval(expr, [fname, [lineo=l]])

instance_eval {|obj| ... }

在对象的context中计算字符串expr并返回结果.

若给出了fnamelineno的话,将假定字符串位于在文件fname的第lineno行,然后开始编译,并能显示文件名/行号等栈跟踪信息.

若给出了块的话,将在对象的context中计算该块并返回结果.self将被传递给块的参数obj.

在对象的context进行计算是指,将self设为那个对象然后开始执行.同时,若在字符串/块中定义了方法的话,则相当于定义了self的特殊方法.

但是,局部变量将被instance_eval内部和外侧的作用域所共享.

: 若在方法定义中,使用instance_eval 的块来定义一个方法的话,将会导致"nested method definition"编译错误. 这主要是受到Ruby语法分析器的限制所致.

def foo
   instance_eval {
     def bar            # <- 被看做嵌套的方法定义
       "bar"
     end
   }
end

# => -:4: nested method definition

若使用字符串传递形式则可绕过该限制.

def foo
   instance_eval %Q{
     def bar
       "bar"
     end
   }
end

# 执行foo时,定义bar函数(实际上是 
# foo的receiver的方法)
foo
p bar
# => "bar"

ruby 1.7 特性: 已经取消了对嵌套方法定义的限制.而且,在1.7以后的版本中,即使不使用instance_eval 也可达到同样的效果(严格说来,还是有所不同的.请参考方法定义的嵌套).

def foo
   def bar
     "bar"
   end
end

foo
p bar
# => "bar"

另外,请参考Module#module_eval,Module#class_eval.

instance_of?(klass)

selfklass类的直接的实例时,返回真.

通常,当obj.instance_of?(c)成立时,obj.kind_of?(c)也是成立的.

请参考kind_of?.

instance_variable_get(var)

ruby 1.8 特性

取得并返回对象的实例变量的值.

可以使用字符串或者Symbol来向var指定实例变量名.

若实例变量尚未定义,则返回nil.

class Foo
  def initialize
    @foo = 1
  end
end

obj = Foo.new
p obj.instance_variable_get("@foo")     # => 1
p obj.instance_variable_get(:@foo)      # => 1
p obj.instance_variable_get(:@bar)      # => nil
instance_variable_set(var, val)

ruby 1.8 特性

val的值赋值给对象的实例变量并返回该值.

可以使用字符串或Symbol来向var设定实例变量名.

若实例变量尚未定义,则重新定义.

obj = Object.new
p obj.instance_variable_set("@foo", 1)  # => 1
p obj.instance_variable_set(:@foo, 2)   # => 2
p obj.instance_variable_get(:@foo)      # => 2
instance_variables

以字符串数组的形式返回对象的实例变量名.

obj = Object.new
obj.instance_eval { @foo, @bar = nil }
p obj.instance_variables

# => ["@foo", "@bar"]

另外,请参考local_variables,global_variables,Module.constants,Module#constants,Module#class_variables.

is_a?(mod)

kind_of?(mod)

只要self是下列任何一个类的实例就返回真,这些类是:mod类和它的子类,以及包括mod模块的类和它的子类.

module M
end
class C < Object
  include M
end
class S < C
end

obj = S.new
p obj.is_a? S       # true
p obj.is_a? M       # true
p obj.is_a? C       # true
p obj.is_a? Object  # true
p obj.is_a? Hash    # false

另外,请参考instance_of?Module#===.

method(name)

self的方法name对象化后得到Method对象并返回该对象.可以使用字符串或Symbol来指定name.

另外,请参考Module#instance_method.



http://www.kuqin.com/rubycndocument/man/built-in-class/errorclass_object.html


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值