/ / Pregunta sobre "gets" en ruby ​​- ruby, input, gets

Pregunta sobre “obtiene” en ruby ​​- ruby, input, obtiene

Me preguntaba por qué cuando intento acceder a diferentes entradas ignora la segunda entrada que tenía.

#!/usr/bin/env ruby
#-----Class Definitions----

class Animal
attr_accessor :type, :weight
end

class Dog < Animal
attr_accessor :name
def speak
puts "Woof!"
end
end

#-------------------------------

puts
puts "Hello World!"
puts

new_dog = Dog.new

print "What is the dog"s new name? "
name = gets
puts

print "Would you like #{name} to speak? (y or n) "
speak_or_no = gets

while speak_or_no == "y"
puts
puts new_dog.speak
puts
puts "Would you like #{name} to speak again? (y or n) "
speak_or_no = gets
end

puts
puts "OK..."

gets

Como puede ver, ignoró por completo mi declaración while.

Esta es una salida de muestra.

Hello World!

What is the dog"s new name? bob

Would you like bob
to speak? (y or n) y

OK...

Respuestas

16 para la respuesta № 1

El problema es que estás recibiendo una nueva líneacarácter en su entrada del usuario. mientras ingresan "y" en realidad están obteniendo "yn". Debe cortar la nueva línea utilizando el método "chomp" en la cadena para que funcione como lo desea. algo como:

speak_or_no = gets
speak_or_no.chomp!
while speak_or_no == "y"
#.....
end

-1 para la respuesta № 2

una vez que use gets () ... imprime esa cadena ... usando p (str) por lo general, la cadena tendrá n al final .. chomp! Se debe utilizar el método para eliminarlo ...