Я пытаюсь использовать select в STDIN и TCP-сокет в Ruby, но по какой-то причине значение, возвращаемое из 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
Вот что я получу, запустив это:
Something's wrong... results[0]: #<TCPSocket:0x33c390>, server: #<TCPSocket:0x33c390>
IDs: results[0]: 1695840, server: 1695990
Я использую Ruby версии 1.8.6 на Mac OS X.
$ ruby --version
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
$ which ruby
/usr/bin/ruby