2012-08-18 7 views
5

estaba viendo un screencast con Jim Weirich donde comenzó a hacer algo como esto:valor de aprobación a los padres en la declaración de la clase en Ruby

class Subuser < User("Type") 
end 

¿Tiene Rubí dejará pasar argumentos al definir una clase padre? No puedo encontrar un ejemplo en el que eso realmente funcione.

+0

¿Cuál es el screencast? –

+0

[Peepcode] (https://peepcode.com/products/play-by-play-jimweirich-ruby) juega con Jim Weirich – Kormie

Respuesta

7

Usted puede hacer que al declarar un método User que toma un argumento y devuelve una clase:

class Admin 
end 

class Client 
end 

def User(arg) 
    case arg 
    when :admin 
     Admin 
    when :client 
     Client 
    end 
end 

class Subuser < User(:admin) 
end 

Subuser.superclass 
# => Admin 
+3

Hechicería como esta, aunque genial en un screencast, no es muy divertido para otras personas mantener. Recuerde que "otras personas" a menudo incluye su yo futuro que olvidó lo que significa este tipo de cosas. Con un poco de suerte, podrás encontrar esta respuesta y refrescar tu memoria cuando eso suceda, pero es mejor evitarla en primer lugar. – tadman

+0

¿Cómo es esta "magia"? Los métodos en mayúscula son comunes (por ejemplo, 'Entero (" 1 ")') y la herencia de expresiones es común (por ejemplo 'clase whatever

+0

El ejemplo de Struct es diferente ya que es el nuevo método en Struct, es decir, parece un método. El único otro ejemplo que encontré en el stdlib es uno de la clase de delegación (no recuerdo cuál). –

Cuestiones relacionadas