Рубиновый цикл для задачи класса - PullRequest
0 голосов
/ 14 июля 2010

хорошо, более легкая для чтения версия кода (я надеюсь)

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

Просто пытаюсь сделать так, чтобы зацикленные адреса распределялись одно за другим по одному серверу.Спасибо

1 Ответ

1 голос
/ 14 июля 2010

Этот алгоритм должен работать:

#!/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

Отредактировано, чтобы добавить: я не буду создавать больше классов только потому, что "классы хороши, хорошо?" Я бы сделал это потому, что, например, метод принимает объект в качестве аргумента и многократно работает с этим объектом; этот метод, вероятно, следует перенести на этот объект. Тем не менее, адреса могут быть самостоятельными объектами:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...