我有以下代码。我想使用myserver1和myserver2的方法,并将它们传递给send_to_servers方法中已遍历的地址。我似乎无法做到这一点。请帮忙。除非我能在改变的基础上拥有这两个接收地址,否则我将无法做我需要做的事情。提前谢谢。
class Addresses
def add
@addresses = %w(me@gmail.com me2@gmail.com me3@gmail.com)
end
def myserver1
puts "Sending email from myserver1 with address #{@address}"
end
def myserver2
puts "Sending email from myserver2 with address #{@address}"
end
def servers
serv = [myserver1, myserver2]
end
# def servers
# serv = (1..2).to_a # Your list of servers goes here
# 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}"
@address = address
end
end
end
a = Addresses.new
a.add
servers = a.servers
a.send_to_servers(servers)
答案 0 :(得分:1)
目前还不清楚你可能想要如何构建它,但这是一个简洁的实现,我认为符合你的描述。
def myserver1(address)
# Do something with address
end
def myserver2(address)
# Do something with address
end
addresses = %w(me@gmail.com me2@gmail.com me3@gmail.com)
servers = %w(myserver1 myserver2).cycle
addresses.each do |address|
send(servers.next, address)
end
道歉,如果我遗漏了对你的问题至关重要的事情。请随时评论需要哪些额外功能来帮助确定规范。
答案 1 :(得分:1)
您的问题是您的服务器方法没有返回任何内容:
def myserver1
puts "Sending email from myserver1 with address #{@address}"
end
此方法打印出消息并返回nil
。 puts
始终返回nil
。
因此,当您执行[myserver1, myserver2]
时,它会输出两条消息并返回[nil, nil]
。
服务器是事物,它们应该是对象,而不是方法。方法是执行和/或返回某些操作。尝试这样的事情:
class Server
def initialize(name)
@name = name
end
def send_address(address)
puts "Sending email from #{@name} with address #{address}"
end
end
addresses = %w(me@gmail.com me2@gmail.com me3@gmail.com)
servers = [Server.new("server one"), Server.new("server two")]
addresses.each_with_index do |address, i|
server = servers[i % servers.length]
server.send_address(address)
end
答案 2 :(得分:1)
我相信你的代码应该被重构为更贴近现实世界。
您想要loop through a list of email addresses and send each iteration to myserver2 and myserver2
。
这意味着您需要拥有电子邮件和服务器的笛卡尔产品,然后“发送”到该对。
require 'net/smtp'
emails = %w{email1@email.com email2@email.com}
servers = %w{server1 server2}
emails.product(servers).each do |address, server|
Net::SMTP.start(server) do |smtp|
smtp.send_message 'Body', 'from@example.com', [address]
end
end