2012-04-01 6 views
0

Hallo, ich versuche, Rubinblöcke zu lernen. Aber ich habe ein Problem auf über diese Konstruktion zu erhalten:Parameter an expliziten Ruby-Block übergeben

class SomeApp 

    attr_accessor :load_listener 

    def on_load(&block) 
    @load_listener = block 
    end 

    def load(x) 
    @load_listener.call(x) if @load_listener 
    end 

end 

app = SomeApp.new 
app.on_load { |x| puts 'on load #{x}'} 
app.load(5) 

Ich verstehe nicht, warum Ergebnis dieses Codes ist ‚auf Last # {x}‘, statt ‚auf Last 5‘ Jede Hilfe wird geschätzt.

Antwort

5

Sie verwenden einfache Anführungszeichen (') statt doppelte Anführungszeichen ("). String-Interpolation (#{...}) funktioniert nur mit doppelten Anführungszeichen.

Ändern Sie puts 'on load #{x}' zu puts "on load #{x}".

+0

Sie haben Recht. Vielen Dank. – bodo