我想在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