2011-01-28 8 views
10

(StackOverflow me está diciendo que esta cuestión es "subjetiva y es probable que se cierre" ... bueno, voy a darle un tiro independientemente)¿La mejor práctica para funciones de espacio de nombres en Ruby? (Pregunta novato)

Estoy escribiendo un montón de métodos de ayuda (para un paquete de TextMate), y me gustaría (y necesito) tener un espacio de nombres ordenado.

Estos métodos son en realidad funciones justas, es decir, no funcionan en nada fuera de su propio alcance y, por lo tanto, no pertenecen realmente a una clase. No hay nada que necesite instanciar.

Hasta ahora, he estado haciendo esto y que funciona bien

module Helpers::Foo 
    module_function 
    def bar 
     # ... 
    end 
end 
Helpers::Foo.bar # this is how I'd like to call the method/function 

Pero, ¿sería mejor:
1. Saltar module_function y declarar los métodos/funciones como self.*?
2. ¿O sería mejor declarar una clase en lugar de un módulo?
3. O use class << self (dentro de un módulo o una clase)?
4. ¿O algo completamente diferente?

Me doy cuenta de que esta es una pregunta bastante abierta, pero realmente solo estoy buscando escuchar lo que la gente está haciendo.

Respuesta

8

prefiero ya sea

module Foo 
    def self.bar 
    "bar" 
    end 
end 

Foo.bar #=> "bar" 

o

module Foo 
    def Foo.bar 
    "bar" 
    end 
end 

Foo.bar #=> "bar" 

pero probablemente se incline hacia el primero, creo self. es muy descriptivo.

Editar: Después de leer los comentarios, propongo una tercera opción que prefiero para la legibilidad. Técnicamente, creo que esto se definiría como la extensión de los métodos incluidos en la clase Eigen.

module Foo 
    module ClassMethods 
    def baz 
     "baz" 
    end 
    end 
    extend ClassMethods 
end 

Foo.baz #=> "baz" 
+0

+1 para el anterior, también conocido como self. –

+2

Buen punto. Pero me temo que el "yo" perderá su significado en mi código, ya que prácticamente todo es un módulo que no contiene más que funciones auxiliares. Entonces, todo se definiría como "yo". En ese caso, podría no definir nada como "yo mismo" y usar "función_módulo" en su lugar. – Flambino

+0

veo, actualizaré la respuesta para incluir una tercera opción que prefiero para esta situación. –

Cuestiones relacionadas