Tôi hiện đang bị kẹt trong vấn đề này. Tôi đã nối vào hàm method_missing trong một lớp mà tôi đã tạo. Khi một hàm được gọi là không tồn tại, tôi muốn gọi một hàm khác mà tôi biết tồn tại, chuyển mảng args như tất cả các tham số cho hàm thứ hai. Có ai biết cách để làm điều này không? Ví dụ, tôi muốn làm một cái gì đó như thế này:Ruby - Giá trị truyền phương thức cuộc gọi của mảng như mỗi tham số
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, và btw, ví dụ trên không làm việc cho tôi)
EDIT
Đây là mã mà làm việc, dựa trên câu trả lời được cung cấp (có một sai lầm trong đoạn code trên):
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