-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy path014_inspect_e_o_metodo_p.rb
executable file
·69 lines (52 loc) · 1.57 KB
/
014_inspect_e_o_metodo_p.rb
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
# 02/06/2016 - Everaldo Gomes - [email protected]
#
# 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