Programador Novato requiere una ayuda ....un simple until que se resiste....

21 views
Skip to first unread message

Roberto Hernández Becerra

unread,
Nov 14, 2013, 11:48:15 PM11/14/13
to rub...@googlegroups.com
Saludos a todos, recien comienzo con ruby, estoy intentando hacer un  menu sencillo con un loop hasta que se eliga la opcion de salir, pero al ejecutar el loop falla, es como si no existiese la condicion....como que no la toma en cuenta....si alguien tiene la amabilidad de decxirme en que me estoy equivocando, le agradeceria ....saludos y gracias desde ya....ahhhh....he revisado varios tutoriales en internet...y segun desprendo de estos este codigo deberia funcionar......

class Ejercicio_Deptos

  def menu
    $seleccion = 0
    begin
      puts "Seleccione   1)Ingresar Propiedad    2)Mostrar Cobro Individual   3)Mostrar todos los cobros   4) Salir"
      STDOUT.flush
      $seleccion = gets.chomp
      puts $seleccion
      puts "adentro del while"

    end until $seleccion == 4  
 puts "afuera de while"
 end

end   #class

begin
    x = Ejercicio_Deptos.new
    puts x.menu
end


<Los acentos han sido omitidos de manera intencional>

Luis Lavena

unread,
Nov 15, 2013, 9:05:35 AM11/15/13
to rub...@googlegroups.com
Saludos Roberto.

2013/11/15 Roberto Hernández Becerra <r.hern...@gmail.com>
until se resiste por que estas comparando cosas distintas:

irb(main):004:0> a = gets.chomp
1
=> "1"
irb(main):005:0> a.class
=> String
irb(main):006:0> a == 1
=> false

gets devuelve un string, luego lo comparas con un numero, que no es un string.

Espero te sirva de ayuda.

-- 
Luis Lavena
AREA 17
-
Perfection in design is achieved not when there is nothing more to add,
but rather when there is nothing more to take away.
Antoine de Saint-Exupéry

nico

unread,
Nov 18, 2013, 9:33:01 AM11/18/13
to rub...@googlegroups.com
el begin ... end no se usa para un bucle
deberias usar while o until
yo tengo hecho algo parecido donde le paso un objeto con un menu

class Menu
  def initialize(objeto)
    @objeto = objeto
  end
  def run
    menu = @objeto.menu
    selected_option = :start
    until selected_option == :exit
      puts "\n\n"
      menu.each_with_index do |item, index|
        puts [index, item[1]].join(" - ")
      end
      print "Ingrese opcion: "
      option = gets.strip.to_i
      selected_option = menu[option][0]
      unless selected_option == :exit
        @objeto.execute(selected_option)
      end
    end
  end
end
Reply all
Reply to author
Forward
0 new messages