我正在尝试在 STDIN 上使用 select 并在 Ruby 中使用 TCP 套接字,但由于某种原因,从 select 返回的值似乎永远不会匹配其中一个选项;看起来它是正在返回的套接字,但它与使用 == (或等于?)不匹配。谁能告诉我为什么从 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
这是我运行它时得到的:
出了点问题... 结果[0]:#<TCPSocket:0x33c390>,服务器:#<TCPSocket:0x33c390> ID:结果[0]:1695840,服务器:1695990
我在 Mac OS X 上运行 Ruby 1.8.6 版。
$红宝石--版本 ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] $ 哪个红宝石 /usr/bin/红宝石