2011-12-04 236 views
1

我想動態調用中使用相同的字符串給定的參數字符串給定的方法instance_eval的,我陷入上雖然提供的參數...紅寶石instance_exec /帶參數

我現在有:

query = Query.new 

while true 
    input = gets.split(%r{[/[[:blank:]]/,]}) 
    puts (query.instance_exec(*input.drop(1)) { |x| 
    instance_eval input.at(0) 
    }) 
end 

所以方法名稱是輸入(0),並且此方法的參數在輸入的其餘部分。 有沒有辦法用這些參數調用這個方法?

+0

你的輸入字符串是什麼樣的?我只問,因爲你的正則表達式有點奇怪。 –

+0

該字符串看起來像'method_name paramList',其中paramList是由逗號,空格或兩者混合分隔的可變數量的參數。所以正則表達式應該將其分解爲一個[method_name,param1,param2,...]形式的數組。 PS:它實際上應該是'%r {[/ [[:blank:]] /,] +}'我同時修正了這個問題。 – Ramses

回答

1

您正在查找的方法是send。它的第一個參數將是該方法,其餘的將被傳遞給該方法。

query = Query.new 
puts query.send(*gets.split(/\s+/)) while true 
  • 可以使用while修改。
  • 你的正則表達式看起來很複雜。我看起來很簡單。
  • 不要忘記使用分解數組的分解運算符*
+0

這讓我接觸到解決方案,謝謝! – Ramses