Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Lettura da file, mi aiutate a capire?

    Ciao a tutti, ho da poco iniziato a studiare Ruby e facendo vari test mi sono imbattutto in qualcosa che non ho ancora perfettamente afferratto.

    Questo blocco di codice funziona correttamente:

    codice:
    File.open @file, 'r' do |f|
      while line = f.gets
        puts line
      end				
    end
    Mentre se lo "inglobo" all'interno di un metodo

    codice:
    def leggi
      File.open @file, 'r' do |f|
        while line = f.gets
    	STDOUT.puts line
        end				
       end		
    end
    sono appunto obbligato a mettere STDOUT oppure $stdout prima di puts altrimenti ricevo un errore.
    (Uninitialized Strem IOError)

    Perchè solo "puts line" come nel primo caso non va bene.

    Si tratta sicuramente di "questione di ambito" ma non ho capito bene il funzionamento.

    Grazie mille.

  2. #2
    A me il codice

    codice:
    def leggi
      File.open @file, 'r' do |f|
        while line = f.gets
          puts line
        end
      end
    end
    non da alcun problema. Quale versione di Ruby usi?

    L'errore che da a te è probabilmente legato ad un errore di esecuzione. Infatti IOError è un errore restituito in caso di problemi con lo stream.

    Ma tu valorizzi la variabile @file prima di lanciare il metodo?
    Comunque non ha molto senso un metodo simile se non nel contesto di una classe.
    Se lo vuoi tenere come metodo dovresti fare qualcosa tipo

    codice:
    def leggi(file_path)
      File.open(file_path, 'r') do |f|
        while line = f.gets
          puts line
        end
      end
    end
    Il codice è poi ancora semplificabile in

    codice:
    def leggi(file_path)
      File.foreach(file_path) do |line|
        puts line
      end
    end
    e per scriverlo alla Ruby way

    codice:
    def leggi(file_path)
      File.foreach(file_path) { |line| puts line } 
    end

  3. #3
    Utente di HTML.it L'avatar di toraz
    Registrato dal
    Nov 2001
    Messaggi
    263

    Re: Lettura da file, mi aiutate a capire?

    Non è mica che la classe in cui hai definito "leggi" è derivata da IO?... perché nel caso stai chiamando il metodo IO#puts su self e non Kernel#puts come ti aspetteresti.

  4. #4
    Sai che ti dico? Che hai proprio ragione!

    Avevo involontariamente creato questa classe col nome "IO" non ricordando/sapendo che avrebbe sovrascritto la classe originale "IO"

    Ecco una delle grosse potenzialità ma anche dei grossi rischi di Ruby, ovvero le classi mai chiuse.

    Grazie mille.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.