Eugen 已经回答了,为什么它不起作用。
但也许以下解决方法可以帮助您:
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\"]
至少在windows下,必须屏蔽"(或')。如果没有,它们已经被删除,直到字符串到达Rake::Aplication(可能是shell替换)