2012-02-01 14 views
6

Mam obiekt jak tenBloki i obiektów

class SomeObject 
    def initialize &block 
    # do something 
    end 
end 

class AnotherObject < SomeObject 
    def initalize &block 
    super 
    # do something with block 
    end 
end 

Kiedy super nazywa się AnotherObject, blok wydaje się być przekazane do SomeObject. Czy to właściwe zachowanie i czy jest wokół niego?

+0

Nie potrzebujesz tego zachowania? –

+0

W moim przypadku nie, nie. – NebulaFox

Odpowiedz

8

Według rubyspec jest to poprawne zachowanie, nawet jeśli przechodzą wyraźne argumenty Super (tj super('foo'))

Jeśli nie chcesz przekazać ten blok, można po prostu przejść przez blok, który nic nie robi, chociaż nie jest to zupełnie to samo (na przykład jeśli metoda zmienia swoje zachowanie w oparciu o block_given?)

Wydaje się, że

super(&nil) 

jest sposób, aby nie przechodzić blok w ogóle Super, choć Nie mogłem znaleźć tego w ruby ​​spec.