Instance_of? e kind_of? is-a e has-a

Mi sapete spiegare la differenza tra i metodi instance_of? e kind_of?

e tra is-a e has-a?

Grazie mille!

  • instance_of? ti dice se obj è una istanza della classe specificata

*esempio

1.instance_of?(Fixnum)
=> true

  • kind_of? ci dice se la classe specificata è la classe dell’oggetto che
    invoca il metodo, oppure se è una superclasse dell’oggetto
    *esempio

i = 1

i.instance_of?(Numeric)
=> false

i.instance_of?(Fixnum)
=> true

i.kind_of?(Numeric)
=> true
#perchè Numeric è la superclass di Integer che è la superclass di Fixnum)

infatti 1.class.superclass.superclass => Numeric

i.kinf_of?(Integer)
=> true

  • is_a? è un sinonimo di kind_of?