2012-08-18 12 views
5

oglądałem screencast z Jim Weirich gdzie zaczął robić coś takiego:wartość karnetów do rodzica w deklaracji klasy w Ruby

class Subuser < User("Type") 
end 

Czy Ruby pozwoli Ci przekazywać argumenty podczas definiowania klasy nadrzędnej? Nie mogę wymyślić przykładu, w którym to faktycznie działa.

+0

Co to screencast? –

+0

[Peepcode] (https://peepcode.com/products/play-by-play-jimweirich-ruby) grać przez zabawę z Jimem Weirichem – Kormie

Odpowiedz

7

Można to zrobić poprzez uznanie metodę User który przyjmuje argument i zwraca klasę:

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

Czarodziejka w tym stylu, podczas gdy fajnie w screencastzie, nie jest zbyt zabawna dla innych ludzi utrzymać. Pamiętaj, że "inni ludzie" często obejmują twoje przyszłe "ja", które zapomniało, co to oznacza. Przy odrobinie szczęścia będziesz w stanie znaleźć tę odpowiedź i odświeżyć pamięć, kiedy to się stanie, ale najlepiej tego unikać. – tadman

+0

Jak to jest "czarodziejstwo"? Metody pisane wielkimi literami są powszechne (np. 'Integer (" 1 ")'), a dziedziczenie z wyrażeń jest typowe (np. 'Class what

+0

Przykład struktury jest inny, ponieważ jest nową metodą w Struct, tzn. Wygląda jak metoda. Jedynym innym przykładem, jaki napotkałem w stdlib, jest jedna z klas delegacji (nie pamiętam, która). –

Powiązane problemy