我也有类似的问题:
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

07-26 05:30