Я не вижу смысла в создании класса здесь, когда простой метод будет делать.
def set_values
["env", "os", "group"].map do |tag|
puts "Please enter values for #{tag}, using spaces or commas"
print "to separate multiple values: "
gets.strip.gsub(/[ ,]+/, ',')
end
end
Предположим, когда пользователь спрашивает, "stage dev,qa" (for
"env" ), "OS X" (for
"OS" ) and "Hell's Angels"
для "group"
.Тогда:
set_values
#=> ["stage,dev,qa", "OS,X", "Hell's,Angels"]
Если, как я подозреваю, вы хотите преобразовать пробелы в запятые только для "env"
, а не для "os"
или "group"
, напишите:
def set_values
puts "Please enter values for env, using spaces or commas"
print "to separate multiple values: "
[gets.strip.gsub(/[ ,]+/, ',')] +
["os", "group"].map do |tag|
print "Please enter value for #{tag}: "
gets.strip
end
end
set_values
#=> ["stage,dev,ga", "OS X", "Hell's Angels"]
См. Array # map , String # gsub и Array # + .
gets.strip.gsub(/[ ,]+/, ',')
просто цепочки две операции s = gets.strip
и s.gsub(/[ ,]+/, ',')
.Цепочка - это обычное явление в Ruby.
Регулярное выражение, используемое gsub
, гласит: «соответствовать одному или нескольким пробелам или запятым», [ ,]
- класс символов , для которого требуется один изсимволы в классе должны совпадать, +
означает, что одно или несколько из этих пробелов или запятых должны совпадать.Если бы строка была "a , b,, c"
, было бы два совпадения, " , "
и ",, "
;gsub
преобразует оба в одну запятую.
Использование print
вместо puts
отображает запись пользователя в той же строке, что и приглашение, сразу после ": "
, а не в следующей строке.,Это, конечно, чисто стилистически.
Часто можно написать gets.chomp
вместо gets.strip
.Удаляя символы новой строки и другие пробелы в конце строки, strip
также удаляет все пробелы в начале строки.strip
, вероятно, лучше в этом случае.