4 votes

Utiliser des variables avec %w ou %W - Ruby

J'ai un modèle similaire Comment utiliser une variable à l'intérieur de %w{} mais mon problème est un peu différent. Je veux prendre une variable de type chaîne et la convertir en tableau en utilisant %w ou %W.

text = gets.chomp   # get user text string

Je saisis "first in first out" (premier entré, premier sorti)

words = %w[#{text}]  # convert text into array of strings

puts words.length
puts words

Sortie console

1
first in first out

Conserve le texte comme un bloc de chaîne et ne le divise pas en un tableau de mots ["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

6voto

tadman Points 70178

%w n'a pas pour but d'effectuer un découpage, c'est une façon d'exprimer que la chaîne de caractères suivante dans la source devrait être scindé. Il s'agit essentiellement d'une notation abrégée.

Dans le cas de %W les #{...} sont traités comme un seul jeton, les espaces qu'ils contiennent sont considérés comme faisant partie intégrante du jeton.

Voici ce qu'il faut faire :

words = text.trim.split(/\s+/)

Faire des choses comme %W[#{...}] est tout aussi inutile que "#{...}" . Si vous avez besoin d'une chaîne de caractères, appelez .to_s . Si vous avez besoin de quelque chose de fractionné, appelez split .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X