forked from everaldo/ruby-em-100-exemplos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
019_um_breve_comentario_sobre_o_protocolo_de_conversao_de_tipos.rb
48 lines (42 loc) · 1.51 KB
/
019_um_breve_comentario_sobre_o_protocolo_de_conversao_de_tipos.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
# 03/06/2016 - Everaldo Gomes - [email protected]
#
# 019 - Um breve comentário sobre o protocolo de conversão de tipos
#
#
# Vimos no exemplo anterior que toda a leitura é feita como String,
# e caso desejos outro tipo de dados, devemos invocar métodos que
# realizam essa conversão. Boa parte desses métodos já vem implementado
# por padrão nas classes String e Fixnum. Enumeremos os principais:
#
#
# to_c # Converte para número complexo
# to_r # Converte para número racional
# to_f # Converte para número em ponto-flutuante
# to_s # Converte para String
# to_i # Converte para Inteiro
# to_sym # Converte para símbolo
# to_str # Somente para objetos que agem como String
# # A única classe do Core do Ruby que implementa isso é a
# # própria classe String
# Mais info em:
# https://gist.github.com/everaldo/de6a1f606fbc49cc59e074f044e62014
#
#
begin
puts "Digite uma string, número ou 'sair' ou [qQ] para terminar"
s = gets.chomp
{to_c: 'Complexo', to_r: 'Racional', to_f: 'Flutuante',
to_i: 'Inteiro', to_s: 'String',
to_sym: 'Símbolo'}.each do |tipo, nome|
puts "original: #{s} - convertido: (#{nome}) #{s.send(tipo).inspect}"
end
end until s == "sair" or s.downcase == "q"
# Eu sei que tem um bug, se você digitar sair ou q de primeira
# ele imprime os valores para esse comando :)
# Perceba que introduzi novos elementos, para instigar a curiosidade:
# bloco begin/end
# condicional com until
# sintaxe de hash literal {}
# blocos do/end
# meta-programação com send()
#