2013-07-07 5 views
8

ich im Anschluss an die Übungen aus Ruby Koans und in about_proxy_object_project.rb gibt es dieses Stück Code:Ruby-2.0 wirft "[BUG] Konsistenzfehler Stack"

class Proxy 
    def initialize(target_object) 
    @object = target_object 
    end 

    # This method was added by me 
    def method_missing(method_name, *args, &block) 
    @object.send method_name 
    end 
end 

, die wie folgt aufgerufen wird:

def test_tv_methods_still_perform_their_function 
    tv = Proxy.new(Television.new) # Television is a class with a :channel attr_accessor and a power method 

    tv.channel = 10 
    tv.power 

    assert_equal 10, tv.channel 
    assert tv.on? 
end 

das Problem ist, dass die Leitung tv.channel = 10 ist der Dolmetscher „brechen“ und wirft:

[BUG] Stack consistency error (sp: 53, bp: 54) 
ruby 2.0.0p0 
(...)  
full stack trace follows 

Ich habe den gleichen Code mit Ruby 1.9.3 versucht und es funktioniert. Ich benutze Ruby 2.0.0-p195.

Also, ist das ein Fehler/Bug? Oder mache ich etwas schrecklich falsch?

+0

Es scheint in p247 am 27. Juni behoben worden zu sein, wie von matt hervorgehoben. – sawa

Antwort

2

Ja. Es ist ein Ruby-Bug in ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-linux]. Am Ende des Stack-Trace, heißt es:

[NOTE] 
You may have encountered a bug in the Ruby interpreter or extension libraries. 
Bug reports are welcome. 
For details: http://www.ruby-lang.org/bugreport.html 

du Ruby Kern melden. Bitte tun Sie dies der Ruby-Community zuliebe.

Wie von matt hervorgehoben, ist es in Ruby 2.0.0p247 behoben.

Ich sehe nicht, dass Sie etwas falsch machen.

+3

Es sieht so aus, als wäre dies in p247 behoben. – matt

+0

@matt Danke für die Information. – sawa

+0

Ich habe mit p247 versucht und es funktioniert, danke! (Ich bin immer noch neugierig zu sehen, was das Problem verursacht hat, aber ich glaube nicht, dass ich die Quelle verstehen werde: P) – NicoSantangelo