2013-09-06 7 views
5

मैं एक रेक कार्य है कि एक आवश्यक पहला तर्क लेता है, और फिर अतिरिक्त तर्क जो मैं एक सरणी में एक साथ रख कर करना चाहते हैं के किसी भी संख्या बनाने के प्रयास कर रहा हूँ:रैक काम w/सूचक तर्क

rake course["COURSE NAME", 123, 456, 789] 

मैं मैंने निम्नलिखित कोशिश की है लेकिन args[:numbers] सभी संख्याओं के बजाय बस एक स्ट्रिंग w/123 है।

task :course, [:name, *:numbers] => :environment do |t, args| 
    puts args # {:name=>"COURSE NAME", :numbers=>"123"} 
end 
+2

'रेक कोर्स ["कोर्स नाम", [123, 456, 78 9]]' के बारे में कैसे? – screenmutt

+0

यह मुझे '{: name =>" कोर्स नाम "देता है, संख्या:>" [123 "} 'जो वास्तव में विचित्र है। –

+0

कार्यों के लिए तर्कों के बीच कोई स्थान की अनुमति नहीं है, इसे आजमाएं: 'रेक कोर्स ["कोर्स नाम", 123,456,789] ' – MrYoshiji

उत्तर

12

रेक 10.1.0 के साथ शुरू आप Rake::TaskArguments#extras उपयोग कर सकते हैं:

task :environment 

task :course, [:name] => :environment do |t, args| 
    name = args[:name] 
    numbers = args.extras 
    puts "name = #{name}" 
    puts "numbers = #{numbers.join ','}" 
end 

आउटपुट:

$ rake "course[COURSE NAME, 123, 456, 789]" 
name = COURSE NAME 
numbers = 123,456,789 

रेक < 10.1.0 के लिए आप एक sufficienty बड़े तर्क सूची बना सकते हैं। यह हैक 26 नंबर तक काम करेगा:

task :course, [:name, *:a..:z] => :environment do |t, args| 
    name = args[:name] 
    numbers = args.values_at(*:a..:z).compact 
    puts "name = #{name}" 
    puts "numbers = #{numbers.join ','}" 
end 
+0

यह काम नहीं करता है। मैंने 'रेक कोर्स [" कोर्स नाम ", 123,456,789]' साथ ही 'रेक कोर्स ["कोर्स नाम", [123,456,789]] 'और दोनों मामलों में' args.extras' 'nil' –

+0

काम किया है मेरे लिए, रेल 3.2.13 और रूबी 1.9.3 – MrYoshiji

+1

ऐसा लगता है [इस सुविधा] (https://github.com/jimweirich/rake/pull/150) रेक 10.1.0 में पेश किया गया था, शायद आपको – Stefan

संबंधित मुद्दे