[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-core
Subject:    [ruby-core:76200] [Ruby trunk Bug#12535] are there 2 sleep methods defined?
From:       cardoso_tiago () hotmail ! com
Date:       2016-06-29 12:47:08
Message-ID: redmine.issue-12535.20160629124708.483ad9c49c798595 () ruby-lang ! org
[Download RAW message or body]

Issue #12535 has been reported by Tiago Cardoso.

----------------------------------------
Bug #12535: are there 2 sleep methods defined?
https://bugs.ruby-lang.org/issues/12535

* Author: Tiago Cardoso
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
I'm updating this gem which "patches" the sleep method to use prepend, as I wanted to \
drop support to ruby < 2.0 . (previous implementation was using alias method chain \
like solution)

So I came across this funny behaviour:

module AlternativeSleep
  def sleep(*)
    puts "going to sleep now..."
    super
  end
end

class << self
  prepend AlternativeSleep
end
class << Kernel
  prepend AlternativeSleep
end

puts "these are the locations..."

puts Kernel.method(:sleep)
puts method(:sleep)

puts "now to work. if you see the going to sleep message only once, there's your bug"

Kernel.sleep 1
sleep 1

In order to make sleep work in both cases, I have to do those 2 prepends. Try to \
comment one of them, and you'll see that one of them will always work. 


I'm led to believe that sleep method has two implementations, although that doesn't \
seem to make sense. Could you provide with some insight?

When I was using the alias-method-chain example, I was including in the main object, \
as main#sleep somehow seemed to land in Kernel.sleep (?) . 



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic