[ruby-it] l'include in un array come funziona?

Mauro Sanna mauro.sanna a comune.cagliari.it
Dom 8 Apr 2007 22:34:26 CEST


Domenico Delle Side wrote:
> Mauro Sanna wrote:
>> non cambia niente, ho provato anche a mettere un valore del tipo
>> if m.include? "prova a xxx.xx.xx" che sono sicuro esserci ma non lo trova.
>> Perche'? Mi sta facendo dannare........
> 
> Ho fatto una prova con irb, usando dei valori simili ai tuoi e non 
> cambia anche per me, la soluzione che ti ho proposto e solo pił 
> veloce/sintatticamente pił corretta, dato che passi comunque una stringa 
> ad include?.

Ho risolto con l'aiuto di qualcuno in un newgroup ma a causa della mia 
scarsa conoscenza di ruby mi sono limitato ad applicare i suggerimenti 
senza capire molto.
Riposto le poche righe di codice:

  class MyNewClass
   @hash = {}
   @arr = []
   @a = []
   IO.foreach("ComuneCA.txt") do |riga|
     codice,cognome,nome,servizio,mail = riga.chomp.split(/\t/)
     @hash.store("#{mail}","#{cognome} #{nome}")
   end
   IO.foreach("mail.log") do |riga1|
     if riga1.match(/Passed/)
       @a=riga1.scan(/<(.*?@.*?)>|\(\?\)/)
       @hash.each_key do |mail|
         if @a.include?(mail)
           puts "#{mail} trovato"
         elsif
           puts "non trovato!!!"
         end
       end
        puts @a.first.class
     end
   end
end

mi e' stato sugerito di controllare il risultato di puts @a.first.class 
ed effettivamente ritorna un array, infatti @a e' un array.
Dovrebbe essere regolare?
Ma cosa fanno quei metodi first.class?
Successivamente ho modificato, sempre dietro suggerimento, la 
@a=riga1.scan(/<(.*?@.*?)>|\(\?\)/) in 
@a=riga1.scan(/<(.*?@.*?)>|\(\?\)/).flatten.compact, dopo questa 
modifica magicamente tutto funziona.
Qualcuno potrebbe spiegarmi?
Grazie mille.


Maggiori informazioni sulla lista Ml