включая пробелы при использовании% w - PullRequest
6 голосов
/ 13 февраля 2009

Следующий код выдает «xyz»

a = %w{x y z} 
print a.to_s

Есть ли опция, которую можно добавить в блок, чтобы разрешить добавление пробелов?

Например, я подумал, что, изменив код на этот, я смогу разделить элементы между пробелами, чтобы получить вывод "x y z"

a = %w{"x " "y " "z "}
print a.to_s

Вместо этого он производит это:

"х", "у", "г"

Ответы [ 4 ]

6 голосов
/ 13 февраля 2009

Вы можете включать пробелы, экранируя их обратной косой чертой (затем добавляя дополнительный пробел в качестве разделителя).

a = %w{x\  y\  z\ }

Это может быть трудно читать, хотя. Если вы хотите поместить туда явные кавычки, вам не нужно %w{}, просто используйте обычный массив с разделителями-запятыми с [].

3 голосов
/ 13 февраля 2009

Не используйте %w для этого - это сокращение, когда вы хотите отделить массив от слов. В противном случае используйте стандартную запись массива:

a = ["x ", "y ", "z "]
2 голосов
/ 13 февраля 2009
a = ["xyz"].split("").join(" ")

или

a = ["x","y","z"].join(" ")

или

a = %w(x y z).join(" ")
0 голосов
/ 27 марта 2009
def explain
  puts "double quote equivalents"
  p "a b c", %Q{a b c}, %Q(a b c), %(a b c), %<a b c>, %!a b c! # & etc
  puts

  puts "single quote equivalents"
  p 'a b c', %q{a b c}, %q(a b c), %q<a b c>, %q!a b c! # & etc.
  puts

  puts "single-quote whitespace split equivalents"
  p %w{a b c}, 'a b c'.split, 'a b c'.split(" ")
  puts

  puts "double-quote whitespace split equivalents"
  p %W{a b c}, "a b c".split, "a b c".split(" ")
  puts
end

explain

def extra_credit
  puts "Extra Credit"
  puts

  test_class = Class.new do
    def inspect() 'inspect was called' end
    def to_s() 'to_s was called' end
  end

  puts "print"
  print test_class.new
  puts "(print calls to_s and doesn't add a newline)"
  puts

  puts "puts"
  puts test_class.new
  puts "(puts calls to_s and adds a newline)"
  puts

  puts "p"
  p test_class.new
  puts "(p calls inspect and adds a newline)"
  puts
end

extra_credit
...