ruby-core

Mailing list archive

[#46930] [ruby-trunk - Bug #6825][Open] forking and pthread_cond_timedwait: Invalid argument (EINVAL) on OS X / 1.9.3-p194 — "xentronium (Mark A)" <markizko@...>

29 messages 2012/08/02

[#46974] [ruby-trunk - Bug #6830][Assigned] test failure test_constants(OpenSSL::TestConfig) [/ruby/test/openssl/test_config.rb:27] on Mac + homebrew — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

17 messages 2012/08/04

[#46975] [ruby-trunk - Bug #6831][Assigned] test_getpwuid() on Mountain Lion — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

12 messages 2012/08/04

[#46996] [ruby-trunk - Bug #6836][Assigned] Improve File.expand_path performance in Windows — "luislavena (Luis Lavena)" <luislavena@...>

15 messages 2012/08/04

[#47036] [ruby-trunk - Feature #6841][Open] Shorthand for Assigning Return Value of Method to Self — "wardrop (Tom Wardrop)" <tom@...>

18 messages 2012/08/07

[#47108] [ruby-trunk - Feature #6852][Open] [].transpose should behave specially — "boris_stitnicky (Boris Stitnicky)" <boris@...>

13 messages 2012/08/10

[#47138] [ruby-trunk - Bug #6861][Open] ERB::Util.escape_html is not escaping single quotes — "spastorino (Santiago Pastorino)" <santiago@...>

14 messages 2012/08/12

[#47163] [ruby-trunk - Bug #6865][Open] GC::Profiler.report might create a huge String and invoke a few GC cycles — "Eregon (Benoit Daloze)" <redmine@...>

9 messages 2012/08/13

[#47189] [ruby-trunk - Feature #6868][Open] Make `do` in block syntax optional when the block is the last argument of a method and is not an optional argument — "alexeymuranov (Alexey Muranov)" <redmine@...>

8 messages 2012/08/14

[#47243] [ruby-trunk - Feature #6895][Open] TracePoint API — "ko1 (Koichi Sasada)" <redmine@...>

27 messages 2012/08/20

[#47267] [ruby-trunk - Bug #6903][Open] [[Ruby 1.9:]] --enable-load-relative broken on systems with /lib64 — "mpapis (Michal Papis)" <mpapis@...>

11 messages 2012/08/22

[#47309] [ruby-trunk - Bug #6929][Open] Documentation for Ripper — "zzak (Zachary Scott)" <zachary@...>

16 messages 2012/08/25

[#47345] [ruby-trunk - Feature #6946][Open] FIPS support? — "vo.x (Vit Ondruch)" <v.ondruch@...>

35 messages 2012/08/28

[ruby-core:47014] [ruby-trunk - Bug #6838] class_eval and instance_eval do not scope class names the same as direct code

From: "cpoirier (Chris Poirier)" <chris@...>
Date: 2012-08-06 04:24:29 UTC
List: ruby-core #47014
Issue #6838 has been updated by cpoirier (Chris Poirier).


On more thought, I can understand that Ruby views class names the same way it does variables, and so pulls them from the binding. It just doesn't feel like it's the right behaviour, in this context.
----------------------------------------
Bug #6838: class_eval and instance_eval do not scope class names the same as direct code
https://bugs.ruby-lang.org/issues/6838#change-28670

Author: cpoirier (Chris Poirier)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11] 


class X
   def self.f()
      puts "::X"
   end
end


class Y
   class X
      def self.f()
         puts "Y::X"
      end
   end
   
   def self.c()
      X.f()
   end
end


Y.class_eval do
   def self.k()
      X.f()
   end
end


Y.c
Y.class_eval { X.f() }
Y.k


====

Y.c outputs "Y::X"
Y.class_eval { X.f() } outputs "::X"
Y.k also outputs "::X"

Similar behaviour happens with instance_eval:

====

class X
   def f()
      puts "::X"
   end
end


class Y
   class X
      def f()
         puts "Y::X"
      end
   end
   
   def c()
      X.new.f()
   end
end


Y.new.c
Y.new.instance_eval { X.new.f() }

====

My expectation is that class_eval and instance_eval should map class names the same as code written directly in the class, as they do with function names.


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

In This Thread