160 votos

Características ocultas de Ruby

Continuando con el "funciones Ocultas de ..." meme, vamos a compartir las menos conocidas, pero útiles, características de lenguaje de programación Ruby.

Trate de limitar esta discusión con núcleo de Ruby, sin ningún tipo de Ruby on Rails cosas.

Ver también:

(Por favor, sólo una característica oculta por la respuesta.)

Gracias

80voto

Farrel Puntos 1955

A partir de Ruby 1.9 Proc#=== es un alias para Proc#llamada, lo que significa Proc objetos pueden ser utilizados en caso de declaraciones como:

def multiple_of(factor)
  Proc.new{|product| product.modulo(factor).zero?}
end

case number
  when multiple_of(3)
    puts "Multiple of 3"
  when multiple_of(7)
    puts "Multiple of 7"
end

76voto

James A. Rosen Puntos 25774

Peter Cooper tiene una buena lista de Ruby trucos. Tal vez mi favorito de su es lo que permite que tanto los elementos individuales y colecciones de ser enumerados. (Es decir, el tratamiento de un no-objeto de colección como una colección que contiene sólo ese objeto.) Se parece a esto:

[*items].each do |item|
  # ...
end

64voto

astronautism Puntos 171

No sé cómo oculto que es esto, pero he encontrado que es útil cuando se necesita para hacer un Hash de un array unidimensional:

fruit = ["apple","red","banana","yellow"]
=> ["apple", "red", "banana", "yellow"]

Hash[*fruit]    
=> {"apple"=>"red", "banana"=>"yellow"}

54voto

tomafro Puntos 3852

Un truco que me gusta es el uso de la splat (*) expansor en objetos distintos de Matrices. He aquí un ejemplo de una expresión regular:

match, text, number = *"Something 981".match(/([A-z]*) ([0-9]*)/)

Otros ejemplos incluyen:

a, b, c = *('A'..'Z')

Job = Struct.new(:name, :occupation)
tom = Job.new("Tom", "Developer")
name, occupation = *tom

52voto

Konstantin Haase Puntos 12089

Wow, nadie mencionó la " flip flop " operador:

1.upto(100) do |i|
  puts i if (i == 3)..(i == 15)
end

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X