Ruby class Object (summary) interactive
→ Click to get an interactive sample (type in code)
Methods
Extra: comparing
# important difference between ==/===/eql? and .equal?
obj = 'a'
other = obj.dup
== (alias ===)obj == other # true (same hash value) Documentation
eql?obj.eql?(other) # true (same hash value)
equal?obj.equal?(other) # false (different objects)
==1 == 1.0 # true
eql?1.eql(1.0) # false (no type conversion)
equal?1.equal?(1.0) # false (no type conversion)
Querying
module Aussie
def gday
"G'day mate"
end
end
class Fred
def initialize(p1, p2)
@a, @b = p1, p2
end
def hello(*args)
"Hi " + args.join(' ')
end
private
def secret; 'shh'; end
end
fred = Fred.new('cat', 99)
is_a? (alias kind_of?)Fred.is_a?(Class) # true Documentation
instance_of?Fred.instance_of?(Class) # true Documentation
insta…_variable_defined?fred.instance_variable_defined?(:@a) # true Documentation
respond_to?fred.respond_to?(:secret) # false Documentation
respond_to? (private)fred.respond_to?(:secret, true) # true Documentation
sendfred.send :hi,"you","reader" # Hi you reader Documentation
send (private)fred.send :secret # shh Documentation
public_send (private ✗)fred.fred.public_send :secret # NoMethodError Documentation
methodfred.method(:hello) # Method:Fred#hello(*args) Documentation
extendfred.extend(Aussie); fred.gday # "G'day mate" Documentation
respond_to?str='hi'; str.respond_to?(:upcase) # true Documentation
respond_to?str='hi'; str.respond_to?(:bee) # false Documentation
send1.send(:puts, 'hello') # hello Documentation
public_send1.public_send(:puts, 'hello') # NoMethodError Documentation
nil?Object.new.nil?; nil.nil? # false; true Documentation
object_idObject.new.object_id # 192 (differs) Documentation
Instance Variables
instance_variable_getfred.instance_variable_get(:@a) # cat Documentation
instance_variable_setfred.instance_variable_set(:@a, 'dog') # dog Documentation
Other
obj = 'a'
other1 = obj.dup
other2 = obj.clone
freezeobj.freeze; obj.frozen? # true Documentation
dupother1=obj.dup; other1.frozen? # false Documentation
cloneother2=obj.clone; other1.frozen? # true Documentation
class Klass
attr_accessor :str
end
module Foo
def foo; 'foo'; end
end
s1 = Klass.new #=> #<Klass:0x401b3a38>
s1.extend(Foo) #=> #<Klass:0x401b3a38>
s1.foo #=> "foo"
s2 = s1.clone #=> #<Klass:0x401be280>
s2.foo #=> "foo"
s3 = s1.dup #=> #<Klass:0x401c1084>
s3.foo #=> NoMethodError: undefined method `foo' for #<Klass:0x401c1084>