2015-07-18 19 views
6

Chcę przekazać argumenty do Proc jak przy użyciu splat, ale zwraca błąd wrong number of block arguments (1 for 0)Jak utworzyć Procy ze zmiennymi argumentami w Crystal?

$callbacks = {} of String => Array(->) 

def add_callback(event, &block) 
    begin 
    $callbacks[event.to_s] << block 
    rescue 
    $callbacks[event.to_s] = [block] 
    end 
end 

add_callback(:event) do |arg| 
    puts "event!" 
end 

$callbacks["event"].first.call 

Error in line 11: wrong number of block arguments (1 for 0)http://carc.in/#/r/7gw

Odpowiedz

7

musisz określić listę argumentów wszędzie.

+0

Więc nie mogę zrobić tak, jak robię w Ruby? http://carc.in/#/r/7h6 –

+0

Nie w pełni, nie. Crystal musi znać listę argumentów, a obsługa wielu różnych w tej samej kolekcji stanie się dość brzydka, by wkrótce nią zarządzać. Jak pokazałem, możliwe jest jednak pominięcie argumentów blokowych, których nie potrzebujesz. –

+0

Rozumiem ... a potem próbowałem zrobić to z Hash i myślę, że nie rozumiem jak to działa jeszcze. Http://carc.in/#/r/7hk –

Powiązane problemy