014_inspect_e_o_metodo_p.rb 1.57 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
# 02/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 014 - inspect e o método p
#
#
# Vimos que o comando (método) puts imprime um objeto para a saída padrão.
# Ele retorna nil e aceita múltiplos parâmetros, separados por vírgula
# 
#
# O método puts força o objeto a se converter para string, invocando
# o método to_s dos seus parâmetros.
#
#
# Já o método p invoca o método inspect dos objetos.
#
# inspect é a representação interna do objeto. Geralmente, nome da classe
# e endereço de memória para objetos que não sejam dos tipos básicos:
# Fixnum, String, Symbol, nil, false, true
#
#
# Quando um objeto não define o método to_s, por padrão ele invoca
# inspect. Mas não espere sempre os mesmos resultados.
# Lembre-se: inspect, representação interna; to_s coerção para String
#
#
#


puts 42 #equivalente a puts(42.to_s) ou puts(42.to_s)
puts 42.to_s
puts(42.to_s())
puts 42.to_s # como não recebe argumentos, não tem ambiguidade


o = Object.new # cria um novo objeto

# Imprime o endereço de memória e o nome da classe
# porque o objeto não define o método to_s
puts o

# Imprime o endereço de memória e o nome da classe # =>
p o


## Agora, vamos definir o método to_s somente para este objeto o


o.define_singleton_method :to_s do
  "Representação String de o"
end

# Imprime Representação String de o
puts o

# Imprime o endereço de memória e o nome da classe
p o


# Vamos hackear o método inspect para provar
# que o método p invoca ele
#

o.define_singleton_method :inspect do
  "Jack esteve aqui"
end

# Imprime Jack esteve aqui
p o