2010-07-14 3 views
-1

ok, plus facile à lire la version du code (je l'espère)boucle rubis à un problème de classe

class First 
    attr_accessor :addresses 

    def initialize 

    address 

    end 


    def address 

     @addresses= [] 

     File.open("/RubyDev/useful/lib/list/listtest.txt").each_line do |i| 

     @addresses << i.chomp 

      end 
    end 

end 

    class Server1 
    b = Last.new 
    puts "Im Server1" 
    puts "Sending the following address to: #{b.loopaddress}" 
    end 

    class Server2 
    b = Last.new.loopaddress 
    puts "Im Server2" 
    puts "Sending the following address to: #{b.loopaddress}" 
    end 

class Last 
    n=First.new 

    email_servers=[Server1.new,Server2.new] 

    def loopaddress 
    n.addresses.each_with_index do |i| 
      i % email_servers.length 
      end 

    end 

end 

juste essayer de faire les adresses bouclées distribuées de façon unique une à la fois entre les deux serveurs. Merci

+1

Un bloc dans 'each_with_index' reçoit _two_ paramètres, un élément et son index. –

+0

Merci, bon à savoir – rahrahruby

Répondre

1

Cet algorithme doit travailler:

#!/usr/bin/ruby1.8 

addresses = (1..10).to_a # Your list of addresses goes here 
servers = (1..2).to_a  # Your list of servers goes here 
addresses.each.with_index do |address, i| 
    server = servers[i % servers.length] 
    puts "Sending address #{address} to server #{server}" 
end 

# => Sending address 1 to server 1 
# => Sending address 2 to server 2 
# => Sending address 3 to server 1 
# => Sending address 4 to server 2 
# => Sending address 5 to server 1 
# => Sending address 6 to server 2 
# => Sending address 7 to server 1 
# => Sending address 8 to server 2 
# => Sending address 9 to server 1 
# => Sending address 10 to server 2 

Modifié ajouter: Je ne pas créer plus de classes juste parce que « les classes sont bonnes, M'Kay? » Je le ferais parce que, par exemple, une méthode prend un objet comme argument et agit à plusieurs reprises sur cet objet; cette méthode devrait probablement être déplacée vers cet objet. Cela dit, les adresses pourraient bien être son propre objet:

class Addresses 

    def initialize 
    @addresses = (1..10).to_a # Or read from a file, or whatever 
    end 

    def send_to_servers(servers) 
    @addresses.each.with_index do |address, i| 
     server = servers[i % servers.length] 
     puts "Sending address #{address} to server #{server}" 
    end 
    end 

end 

servers = (1..2).to_a  # Your list of servers goes here 
addresses = Addresses.new 
addresses.send_to_servers(servers) 
+0

merci wayne, pourriez-vous mettre les serveurs et les adresses dans les classes? C'est-à-dire que je suis en train de me raconter. – rahrahruby

+0

Merci beaucoup. J'apprécie la réponse et le temps que vous avez pris pour la produire. – rahrahruby

+0

@MAP, C'était un plaisir! –