我也有类似的问题:
How to use variable inside %w{}
但我的问题有点不同。我要获取一个字符串变量,并使用%w或%w将其转换为数组。
text = gets.chomp # get user text string
#例如,我输入“先进先出”
words = %w[#{text}] # convert text into array of strings
puts words.length
puts words
控制台输出
1
first in first out
将文本保留为字符串块,不将其拆分为数组字[“first”、“in”、“first”、“out”]
words = text.split (" ") # This works fine
words = %w[#{gets.chomp}] # This doesn't work either
words = %w['#{gets.chomp}'] # This doesn't work either
words = %W["#{gets.chomp}"] # This doesn't work either
words = %w("#{gets.chomp}") # This doesn't work either
最佳答案
%w
不打算进行任何拆分,而是表示源中的以下字符串应该拆分的一种方式。实际上,这只是一个简略的符号。
在%W
的情况下,#{...}
块被视为单个标记,其中包含的任何空格都被视为不可分割的一部分。
正确的做法是:
words = text.trim.split(/\s+/)
做像
%W[#{...}]
这样的事情和"#{...}"
一样毫无意义。如果需要转换为字符串,请调用.to_s
。如果你需要分拨电话split
。