Евгений уже ответил , почему это не работает.
Но, возможно, вам поможет следующий обходной путь:
task :test_commas, :arg1, :arg2 do |t, args|
arg = args.to_hash.values.join(',')
puts "Argument is #{arg.inspect}"
end
Требуется два аргумента, ноприсоединяется к ним для получения «настоящего».
Если у вас больше одной запятой, вам нужно больше аргументов.
Я провел более глубокое исследование и нашел один (или два)решение.Я не думаю, что это идеальное решение, но кажется, что оно работает.
require 'rake'
module Rake
class Application
#usage:
# rake test_commas[1\,2\,3]
def parse_task_string_masked_commas(string)
if string =~ /^([^\[]+)(\[(.*)\])$/
name = $1
args = $3.split(/\s*(?<!\\),\s*/).map{|x|x.gsub(/\\,/,',')}
else
name = string
args = []
end
[name, args]
end
#Usage:
# rake test_commas[\"1,2\",3]
#" and ' must be masked
def parse_task_string_combined(string)
if string =~ /^([^\[]+)(\[(.*)\])$/
name = $1
args = $3.split(/(['"].+?["'])?,(["'].+?["'])?/).map{|ts| ts.gsub(/\A["']|["']\Z/,'') }
args.shift if args.first.empty?
else
name = string
args = []
end
[name, args]
end
#~ alias :parse_task_string :parse_task_string_masked_commas
alias :parse_task_string :parse_task_string_combined
end
end
desc 'Test comma separated arguments'
task :test_commas, :arg1 do |t, args|
puts '---'
puts "Argument is #{args.inspect}"
end
Версия parse_task_string_masked_commas
позволяет звонки с замаскированными запятыми:
rake test_commas[1\,2\,3]
Версия parse_task_string_combined
позволяет:
rake test_commas[\"1,2,3\"]
По крайней мере под окнами "(или ') должны быть замаскированы. Если нет, они уже удаляются, пока строка не достигнет Rake :: Aplication (возможно, подстановка оболочки)