所有类的超类,定义了一般对象的行为。
检查 self 和 other 是否相等,预设情况下与 equal?有相同的效果。
此方法应需要依照各类的性质来重新定义。
此方法多是是用于 case 判断句中。预设情况下与 Object#== 相同。在子类中进行归属检查时,可以根据情况重新定义。
返回调用者所属的类。
生成对象的副本。clone 返回对象的完整副本,包括冻结状态和特殊方法。而 dup 只有复制对象内容而已。
注意,clone 和 dup 执行的是简单复制。所复制的是对象本身,而不是对象所指的对象(例如数组元素)。
复制的对象
obj.equal?(obj.clone)
通常不成立,但是
obj == obj.clone
则通常都会成立。
若是尝试复制 true、false、nil、Numeric 数字、 Symbol 符号 之类的对象则会抛出 TypeError 异常。
当 other 是 self 时,返回 true。此方法不可以被重新定义。
冻结对象,即禁止改动对象的内容,若是修改冻结对象会抛出 TypeError 异常。
若是对象被冻结则返回 true。
将对象以人类可读的字符串形式返回。
若 self 是 klass 类的直属实例,则返回 true。当 obj.instance_of?(c) 成立时,obj.kind_of?(c) 也一定会成立。
获取并返回该对象的实例变量。
其中的参数 var 必须是字符串或者 Symbol 符号 的形式。
如果目标变量没有被定义,则会返回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
设置对象中的变量的变量名 var 和变量值 val 。
其中的参数 var 必须是字符串或者 Symbol 符号 的形式。
如果所输入的变量在之前并没有被定义,那么它会被函数自动定义。
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
以符号数组的形式返回对象中所有变量的名字。
obj = Object.new obj.instance_eval { @foo, @bar = nil } p obj.instance_variables # => [:@foo, :@bar]
当 self 是 mod 类(或其子类)或是包含了 mod 模块的类(或其子类)的实例时,返回 true。
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
检查调用者是否为 nil。
如果该对象有公共方法 name 的话,返回 true 。
name 可以是 符号 或者字符串。 如果参数 priv 的默认值为true ,那么即使 name 是私有方法,函数也依旧返回 true 。
将 args 作为参数,调用 name 方法,并返回方法的返回值。
当然,包含着块的数据也是可以传递的。方法名 name 可以是字符串或者 符号 。
返回与每个对象对应的独特整数。一个对象得到怎样的ID是不确定的。
需要将对象隐式转为数组时,在内部自动调用。
需要将对象隐式转为哈希表时,在内部自动调用。
需要将对象隐式转为整数时,在内部自动调用。
返回对象的字符串形式,由 print 和 sprintf 在内部调用。
需要将对象暗中转为字符串时,在内部自动调用。