[#57574] [ruby-trunk - Feature #8976][Open] file-scope freeze_string directive — "akr (Akira Tanaka)" <akr@...>

70 messages 2013/10/02

[#57579] [ruby-trunk - Feature #8977][Open] String#frozen that takes advantage of the deduping — "sam.saffron (Sam Saffron)" <sam.saffron@...>

25 messages 2013/10/02

[#57679] [ruby-trunk - Feature #8987][Open] map/collect extension which handles arguments — "sowieso (So Wieso)" <sowieso@...>

16 messages 2013/10/05

[#57705] [ruby-trunk - Feature #8992][Open] Use String#freeze and compiler tricks to replace "str"f suffix — "headius (Charles Nutter)" <headius@...>

43 messages 2013/10/07

[#57727] [ruby-trunk - Feature #8998][Open] string keys for hash literals should use fstrings — "normalperson (Eric Wong)" <normalperson@...>

17 messages 2013/10/08

[#57771] [ruby-trunk - Bug #9008][Open] TestProcess#test_clock_getres_constants and TestProcess#test_clock_gettime_constants fails on ARM — "vo.x (Vit Ondruch)" <v.ondruch@...>

15 messages 2013/10/09

[#57888] [ruby-trunk - Feature #9025][Open] Clarify the error message when calling a method with the wrong number of arguments — Nerian (Gonzalo Rodríguez) <siotopo@...>

11 messages 2013/10/15

[#57993] [ruby-trunk - Feature #9047][Open] Alternate hash key syntax for symbols — "jamonholmgren (Jamon Holmgren)" <jamon@...>

13 messages 2013/10/23

[#58007] [ruby-trunk - Feature #9049][Open] Shorthands (a:b, *) for inclusive indexing — "mohawkjohn (John Woods)" <john.o.woods@...>

25 messages 2013/10/24

[#58033] [ruby-trunk - Bug #9053][Open] SSL Issue with Ruby 2.0.0 — "tisba (Sebastian Cohnen)" <ruby-lang@...>

16 messages 2013/10/25

[#58080] [ruby-trunk - Feature #9064][Open] Add support for packages, like in Java — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

23 messages 2013/10/30

[ruby-core:58055] [ruby-trunk - Bug #9055][Rejected] Global methods called from an object can access object's internals

From: "matz (Yukihiro Matsumoto)" <matz@...>
Date: 2013-10-27 23:58:03 UTC
List: ruby-core #58055
Issue #9055 has been updated by matz (Yukihiro Matsumoto).

Status changed from Open to Rejected

That's what global methods are.  If you have objection, you need to be more specific and concrete.
What exactly do you want, and what behavior of global methods will satisfy you?

Matz.

----------------------------------------
Bug #9055: Global methods called from an object can access object's internals
https://bugs.ruby-lang.org/issues/9055#change-42637

Author: concorde (Alexander Korolkov)
Status: Rejected
Priority: Normal
Assignee: 
Category: 
Target version: current: 2.1.0
ruby -v: ruby 2.1.0dev (2013-10-27 trunk 43439) [x86_64-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


=begin
When I run the following program:

 def foo()
     bar(1)
     puts "baz: #{@baz}"
 end

 def bar(n)
     puts "global bar: #{n}"
 end

 class X
     def initialize()
         @baz = 42
         foo()
     end
     def bar(n)
         puts "X::bar: #{n}"
     end
 end

 foo()
 X.new()

I expect that foo() will be called once directly and once indirectly from X constructor. So I expect the following output:

 global bar: 1
 baz:
 global bar: 1
 baz:

But in reality I get the following output:

 global bar: 1
 baz:
 X::bar: 1
 baz: 42

So when the method foo() is called from a method of object, it runs in the context of this object! It can access instance variables (@baz) and calls object's method bar() instead of global method bar().

What is this, a bug or a hidden feature? It's never mentioned in ruby tutorials or documentation. This behavior is counter-intuitive and may be potentially dangerous.

The same happens in latest ruby-trunk, ruby-1.8 and ruby-1.9. 
=end


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

In This Thread

Prev Next