Ruby 1.8.3 lançado!
Publicado em Developer
Eba! Saiu o Ruby 1.8.3! Algumas coisas novas apareceram:
A opção -W: -W0 para não mostrar os warnings, -W1 para nível normal e -W2 para nível detalhado. -w é igual a -W2.
warning.rb ---------- MyConst = "teste" MyConst = "teste de novo" ruby warning.rb [taq@~/code/ruby]ruby warning.rb warning.rb:2: warning: already initialized constant MyConst [taq@~/code/ruby]ruby -W0 warning.rb
Notação %W, similar a %w, mas permite interpolação:
[taq@~/code/ruby]irb
irb(main):001:0> v = "1.8.3"
=> "1.8.3"
irb(main):002:0> %w(new notation #{v})
=> ["new", "notation", "\#{v}"]
irb(main):003:0> %W(new notation #{v})
=> ["new", "notation", "1.8.3"]
irb(main):004:0>
Símbolos seguem o mesmo esquema:
[taq@~/code/ruby]irb
irb(main):001:0> v = "1.8.3"
=> "1.8.3"
irb(main):002:0> s1 = :"symbol"
=> :symbol
irb(main):003:0> s2 = :"symbol_#{v}"
=> :"symbol_1.8.3"
irb(main):004:0> s1
=> :symbol
irb(main):005:0> s1.class
=> Symbol
irb(main):006:0> s2
=> :"symbol_1.8.3"
irb(main):007:0> s2.class
=> Symbol
irb(main):008:0>
Arrays podem receber blocos para preencher seus valores, quando especificado o seu tamanho (ou no método fill):
[taq@~/code/ruby]irb
irb(main):001:0> Array.new(10) {|n| n+1}
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
irb(main):002:0>
O método to_i de String agora aceita a base para conversão, e quando for zero, pega a base especificada:
[taq@~/code/ruby]irb irb(main):001:0> "101".to_i(10) => 101 irb(main):002:0> "101".to_i(2) => 5 irb(main):003:0> "101".to_i(8) => 65 irb(main):004:0> "101".to_i(16) => 257 irb(main):005:0> "101".to_i(0) => 101 irb(main):006:0> "0b101".to_i(0) => 5 irb(main):007:0> "0101".to_i(0) => 65 irb(main):008:0> "0x101".to_i(0) => 257
Adicionado Array.transpose:
[taq@~/code/ruby]irb irb(main):001:0> a = [[1,2],[3,4],[5,6]] => [[1, 2], [3, 4], [5, 6]] irb(main):002:0> a.transpose => [[1, 3, 5], [2, 4, 6]]
Adicionado Array.fetch, que retorna o elemento do array, se não encontrado, retorna o segundo parâmetro ou o retorno da execução do bloco:
[taq@~/code/ruby]irb
irb(main):001:0> a = [11,22,33,44]
=> [11, 22, 33, 44]
irb(main):002:0> a.fetch(1)
=> 22
irb(main):003:0> a.fetch(4)
IndexError: index 4 out of array
from (irb):3:in `fetch'
from (irb):3
from :0
irb(main):004:0> a.fetch(4,"inexistente")
=> "inexistente"
irb(main):005:0> a.fetch(4) {|v| "inexistente: indice #{v}"}
=> "inexistente: indice 4"
Adicionado Array.insert, que insere o(s) elemento(s) antes do índice especificado:
[taq@~/code/ruby]irb irb(main):001:0> a = %w(um dois cinco) => ["um", "dois", "cinco"] irb(main):002:0> a.insert(2,"tres","quatro") => ["um", "dois", "tres", "quatro", "cinco"]
Adicionado String.insert, que insere outra String índice especificado. Aqui tem um fato curioso que é um método destrutivo mas sem o sinal de ! na frente (ou seja, insert!). A discussão sobre isso pode ser vista aqui.
Um pouco do texto: "I think I'm following matz ideas when I named it to be 'insert' instead of
'insert!'. And the reasoning is that currently the methods are not named with exclamation mark (!) if
1) the name clearly indicates the receiving object is going to change and/or
2) there's no corresponding method with implicit dup."
Parece que o Matz concordou com isso, então aí está o método destrutivo sem o !:
[taq@~/code/ruby]irb irb(main):001:0> s = "Ruby 1.8.3" => "Ruby 1.8.3" irb(main):002:0> s.insert(5,"versao ") => "Ruby versao 1.8.3" irb(main):003:0> s => "Ruby versao 1.8.3"
Adicionados String.lstrip e String.rstrip que removem espaços à esquerda e à direita, correspondentemente:
[taq@~/code/ruby]irb
irb(main):001:0> s1 = " hello "
=> " hello "
irb(main):002:0> s2 = "world! "
=> "world! "
irb(main):003:0> puts "#{s1.lstrip}#{s2.rstrip}"
hello world!
Adicionados String.match(pattern), que converte pattern em uma Regexp (se já não for uma) e invoca o método match:
[taq@~/code/ruby]irb
irb(main):001:0> "abc123".match("[0-9]{1,3}")
=> #
irb(main):002:0> "abc123".match("[0-9]{1,3}")[0]
=> "123"
Adicionado Symbol.all_symbols. Se o ObjectSpace não lista os símbolos, agora temos um jeito de dar uma olhada neles. :-)
[taq@~/code/ruby]irb
irb(main):001:0> s = :zabumba
=> :zabumba
irb(main):002:0> Symbol.all_symbols.select {|s| s.to_s[0].chr=='z'}
=> [:zone, :"zero?", :zip, :zabumba]
Adicionado Range.step:
[taq@~/code/ruby]irb
irb(main):001:0> r = (0..10)
=> 0..10
irb(main):002:0> r.step(2) {|v| puts v}
0
2
4
6
8
10
E MUITAS outras mudanças! Verifiquem o arquivo <source>/doc/NEWS
Comentários
Comentários fechados.
Sem nenhum comentário.
Artigos anteriores
- Guia Completo do vim-rails - sex, 24 de outubro de 2025, 09:23:37 -0300
- Parâmetros de contexto em Kotlin - ter, 29 de julho de 2025, 17:33:07 -0300
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300