Ruby - Call-Methode übergeben von Werten des array die einzelnen parameter
Bin ich derzeit hängengeblieben auf dieses problem. Ich habe eingehakt in die method_missing Funktion in einer Klasse, die ich gemacht habe. Wenn eine Funktion aufgerufen wird, die nicht existiert, will ich eine andere Funktion aufrufen ich weiß, existiert, vorbei an dem args-array, da Sie alle Parameter, um die zweite Funktion. Kennt jemand einen Weg, dies zu tun? Zum Beispiel würde ich gerne etwas wie das hier tun:
class Blah
def valid_method(p1, p2, p3, opt=false)
puts "p1: #{p1}, p2: #{p2}, p3: #{p3}, opt: #{opt.inspect}"
end
def method_missing(methodname, *args)
if methodname.to_s =~ /_with_opt$/
real_method = methodname.to_s.gsub(/_with_opt$/, '')
send(real_method, args) # <-- this is the problem
end
end
end
b = Blah.new
b.valid_method(1,2,3) # output: p1: 1, p2: 2, p3: 3, opt: false
b.valid_method_with_opt(2,3,4) # output: p1: 2, p2: 3, p3: 4, opt: true
(Oh, und btw, das obige Beispiel funktioniert so nicht für mich)
BEARBEITEN
Dies ist der code, der arbeitet, basierend auf der Antwort (es ist ein Fehler im code oben):
class Blah
def valid_method(p1, p2, p3, opt=false)
puts "p1: #{p1}, p2: #{p2}, p3: #{p3}, opt: #{opt.inspect}"
end
def method_missing(methodname, *args)
if methodname.to_s =~ /_with_opt$/
real_method = methodname.to_s.gsub(/_with_opt$/, '')
args << true
send(real_method, *args) # <-- this is the problem
end
end
end
b = Blah.new
b.valid_method(1,2,3) # output: p1: 1, p2: 2, p3: 3, opt: false
b.valid_method_with_opt(2,3,4) # output: p1: 2, p2: 3, p3: 4, opt: true
Du musst angemeldet sein, um einen Kommentar abzugeben.
beize die
args
array:send(real_method, *args)