我想在STDIN上使用select和在Ruby中使用TCP套接字,但由于某些原因,从select返回的值似乎永远不匹配其中的一个选项;它看起来像是被返回的套接字,但它不匹配使用==(或等于?)。谁能告诉我为什么从select返回的结果与我传入的对象不匹配,以及我应该在这里做些什么改变?为什么Ruby的select没有返回套接字?
server = TCPSocket::new("irc.freenode.net", 7000)
server.puts "NICK MyBot"
server.puts "USER #{ENV['USER']} 0 * :My Bot"
# <snip definitions>
while (!$done)
results = select([server, STDIN], nil, nil)
if results[0] == STDIN
puts "Reading from STDIN"
execute_command
elsif results[0] == server
puts "Reading from server"
receive_data
else
puts "Something's wrong... results[0]: #{results[0]}, server: #{server}"
puts "IDs: results[0]: #{results[0].__id__}, server: #{server.__id__}"
exit 1
end
end
这里就是我得到的,当我运行此:
Something's wrong... results[0]: #<TCPSocket:0x33c390>, server: #<TCPSocket:0x33c390> IDs: results[0]: 1695840, server: 1695990
我在Mac OS X上运行的Ruby版本1.8.6
$ ruby --version ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] $ which ruby /usr/bin/ruby
是的,就是这样。我想我错过了结果是一个数组数组;令人困惑的是,在我的调试语句中,数组的打印方式与单个套接字完全相同。 我结束了循环遍历结果[0]中的元素而不是使用include?,但你的回答让我开始了。谢谢! – 2009-02-23 15:57:24