2009-05-20 6 views
1

Weiß jemand, ob es einen Weg gibt, auf die Namen der in Ruby-Blöcken übergebenen Parameter zuzugreifen?Ruby blockt Parameternamen

z.

def do_something() 
    # method uses the names of the parameters passed to the block 
    # in addition to their values 
    # e.g. the strings "i" and "j" 
end 

do_something { |i, j| ... } 

Es ist eine Voraussetzung für eine DSL, die ich schreibe, und ein ziemlich ungewöhnlicher Anwendungsfall. Dies ist wahrscheinlich mit etwas wie Partree möglich, ich fragte mich nur, ob es einen leichteren/kühneren Weg gab.

Dank

+0

Warum möchten Sie das tun? – Chuck

+0

Ich brauche Zugriff auf die Parameternamen für eine DSL, die ich schreibe. – fturtle

+1

Können Sie ein Beispiel geben (vielleicht den Fragetext erweitern?), Welches Problem Sie dazu veranlasst, dies zu fragen? Ich bin besorgt, dass Sie vielleicht versuchen, die Blockdeklarationssyntax in eine Form zu bringen, die es nicht braucht ... AFAIK es ist nicht möglich, aber Sie können vielleicht dorthin gelangen, wo Sie anders hin wollen. –

Antwort

6

Dies tatsächlich möglich ist, sondern nur in der Kofferraum-Version 1.9:

->(a,b,c) {}.parameters 

Es ist allerdings nicht veröffentlicht und wird höchstwahrscheinlich in Ruby 1.9.2 enthalten sein.

+0

Ja, es sieht so aus, als wollte das Poster es wissen. Ruby 1.9 beeindruckt weiterhin! – m104

+0

Beachten Sie, dass dies nur im Kofferraum ist. Es ist nicht in 1.9.1. – Chuck

+0

Großartig. Danke für die Hilfe an alle. Ich freue mich darauf, es auszuprobieren. – fturtle

2

Update: Es wie Ruby aussieht, kann 1,9 tun, was Sie anfordern. Siehe Florians Antwort.

Ja, nun, Ruby hat diese großartige Möglichkeit, die genannten Parameter zu übergeben: Hash.

Hier ist, wie es funktioniert:

def do_something(params) 
    params.each do |key, value| 
    puts "received parameter #{key} with value #{value}" 
    end 
end 

do_something(:i => 1, :j => 2) 

Ansonsten keine gibt es nicht wirklich eine Möglichkeit, die Namen der übergebenen Variablen in Ruby zu bekommen. Eine Variable in Ruby ist nur eine Referenz auf ein Objekt, daher gibt es keine Möglichkeit, aus dem Objekt zu erfahren, welche Referenz (der möglicherweise vielen Referenzen) im Methodenaufruf verwendet wurde.

Verwandte Themen