ruby - vectores - ¿Cómo puedo pasar una matriz como argumento a una tarea de Rake?
qué es una matriz en programacion (2)
Estoy escribiendo una tarea de Rake y quiero pasar una matriz como uno de los argumentos. Así es como lo tengo actualmente.
task :change_statuses, :ids, :current_status, :new_status do |task, args|
puts "args were #{args.inspect}"
end
He intentado ejecutar la tarea de estas maneras:
# First argument as array
rake "change_statuses[[1,2,3], active, inactive]"
# First argument as string
rake "utility:change_account_statuses[''1,2,3'', foo, bar]"
Mi salida esperada sería:
args were {:ids=> [1,2,3], :current_status=> 2 , :new_status=> 3}
Sin embargo, mi salida real en cada caso es:
args were {:ids=>"[1", :current_status=>"2", :new_status=>"3]"}
¿Cómo puedo pasar una matriz a una tarea de Rake?
Una de las soluciones es evitar ,
símbolo en la cadena, por lo que su línea de comando se vería así:
$ rake change_statuses[''1 2 3'', foo, bar]
Entonces simplemente puedes dividir las IDs:
# Rakefile
task :change_statuses, :ids, :current_status, :new_status do |task, args|
ids = args[:ids].split '' ''
puts "args were #{args.inspect}"
puts "ids were #{ids.inspect}"
end
O puede analizar el valor de los identificadores para obtener el resultado esperado:
args[:ids] = args[:ids].split('' '').map{ |s| s.to_i }
Estoy usando rake 0.8.7
rake "change_statuses[1 2 3, foo, bar]"
esto funciona para mí, no deberías cupo 1 2 3 con ''
task :import_course, [:cids, :title] => :environment do |t, args|
puts args[:cids]
end
si asigna 1 2 3 como la respuesta correcta, args [: cids] será "''1 2 3''", que ''
char incluido, debe recortar ''
char, pero si usa mi respuesta, args [: cids] será "1 2 3", que es más fácil de usar, solo necesitas args [: cids] .split ("") para obtener [1, 2, 3]