在使用%w时包括空格吗?

6
以下代码输出"xyz"。
a = %w{x y z} 
print a.to_s

是否有一种选项可以添加到块中,以允许添加空格?

例如,我认为通过将代码更改为以下内容,我可以使用空格分隔元素,从而产生“x y z”的输出。

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

相反,它生成了这个:

“x”“y”“z”

4个回答

6

您可以通过反斜杠转义空格(然后添加额外的空格作为分隔符)来包含空格。

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

然而,这可能会变得难以阅读。如果您想在其中放置显式引号,则不需要使用%w{},只需使用带有[]的普通逗号分隔数组即可。


3

不要使用%w,因为它是用于将字符串按空格分隔成数组的快捷方式。否则,请使用标准的数组表示方法:

a = ["x ", "y ", "z "]

2
a = ["xyz"].split("").join(" ")

或者

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

或者

a = %w(x y z).join(" ")

我不知道你可以这样做。谢谢。 - K. Berman
1
你遇到的问题是,在Ruby 1.9之前的版本中,array.to_s只是将所有元素串联在一起。问题不在于你的数组数据,而在于打印数组的方法。这就是为什么%w{x y z}.join(' ')可以正常工作的原因。此外,要在%w数组值中包含空格,请使用“\”(反斜杠+空格)。 - Chuck

0
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接