Sur mon Mac le fichier /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/resolv.rb a le code suivant :
597 while (now = Time.now) < timelimit 598 timeout = timelimit - now 599 if !IO.select([@sock], nil, nil, timeout) 600 raise ResolvTimeout 601 end 602 reply, from = recv_reply
La ligne 600 me laisse perplexe, voyez-vous pourquoi?
Pour la ligne 600, aucune idée, mais sur la ligne 599, il y a comme un yoyotage.
Rénald
27 May 09 at 11:09 am
Ah oui la 599 c est mon copié/collé qui est pas passé. Pour la 600 ca devrait etre raise ResolvTimeout.new(“quelquechose”) ou alors j’ai loupé un truc.
Fabien Penso
27 May 09 at 5:30 pm
Si ça devrait marcher. Kernel.raise peut prendre un type et l’instancier.
Jb Evain
28 May 09 at 11:27 am
Effectivement, un message ne ferait pas de mal :
$ irb
>> # Context
?> module Timeout
>> class Error > end
>> end
=> nil
>> TimeoutError = Timeout::Error
=> Timeout::Error
>> class ResolvTimeout > end
=> nil
>>
?> # Raising without message
?> begin
?> raise ResolvTimeout
>> rescue ResolvTimeout
>> print "ResolvTimeout: " + $!
>> end
ArgumentError: wrong number of arguments (0 for 1)
from (irb):12:in `initialize'
from (irb):12:in `exception'
from (irb):12:in `raise'
from (irb):12
>>
?> # Raising with mesage
?> begin
?> raise ResolvTimeout, "Oh my god!"
>> rescue ResolvTimeout
>> print "ResolvTimeout: " + $! + "\n"
>> end
ResolvTimeout: Oh my god!
=> nil
>>
Rénald
28 May 09 at 11:45 am
Merci Rénald, nous sommes d’accord
Fabien Penso
28 May 09 at 7:00 pm