[#407882] Ruby extremely slow compared to PHP — Mick Jagger <lists@...>

Hello there, how are you? Hope you are fine. I am a PHP programmer

17 messages 2013/06/02

[#407908] TCPServer/Socket and Marshal problem — Panagiotis Atmatzidis <atma@...>

Hello,

18 messages 2013/06/03

[#407946] Is rubyquiz.com dead? — Alphonse 23 <lists@...>

Thread title says everything.

18 messages 2013/06/04

[#408012] Need help understanding recursion. — pedro oliva <lists@...>

Ive been reading Chris Pine's book 'Learn to Program' and its been going

11 messages 2013/06/06

[#408129] Getting Started With Development — Chamila Wijayarathna <cdwijayarathna@...>

I'm new to Ruby Development. I downloaded source from Github, but couldn't

24 messages 2013/06/11
[#408131] Re: Getting Started With Development — Per-erik Martin <lists@...> 2013/06/11

Ruby is often installed on linux, or can be easily installed with the

[#408146] Re: Getting Started With Development — "Chamila W." <lists@...> 2013/06/11

Per-erik Martin wrote in post #1112021:

[#408149] Re: Getting Started With Development — "Carlo E. Prelz" <fluido@...> 2013/06/11

Subject: Re: Getting Started With Development

[#408198] NokoGiri XML Parser — "Devender P." <lists@...>

Hi,

11 messages 2013/06/13

[#408201] trying to load a .rb file in irb — "Eric D." <lists@...>

I am trying to load a ruby program into irb and it will not load.

12 messages 2013/06/13

[#408205] Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...>

Hell Team,

18 messages 2013/06/13
[#408219] Re: Can I use Sinatra to render dynamic pages? — Nicholas Van Weerdenburg <vanweerd@...> 2013/06/14

You should be able to do this without JavaScript by using streaming.

[#408228] Re: Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...> 2013/06/14

Well, I got some good suggestions from everyone here. I thank you all for

[#408275] Compare and sort one array according to another. — masta Blasta <lists@...>

I have two arrays of objects that look something like this:

14 messages 2013/06/17

[#408276] Comparing objects — "Thom T." <lists@...>

How do I compare two objects in Ruby, considering only attributes

15 messages 2013/06/17

[#408307] getting the most out of Ruby — robin wood <lists@...>

I write a lot of scripts in Ruby, most are small simple things but some

13 messages 2013/06/18

[#408309] Creating ruby script exe — Rochit Sen <lists@...>

Hi All,

17 messages 2013/06/18

[#408357] Beginners problem with database and datamapper — cristian cristian <lists@...>

Hi all!

28 messages 2013/06/20

[#408437] How do I input a variable floating point number into Ruby Programs — "Michael P F." <lists@...>

I want to evaluate the following interactively:

10 messages 2013/06/23

[#408518] #!/usr/bin/env: No such file or directory — Todd Sterben <lists@...>

I am new to both linux and ruby. I am using Ubuntu and Ruby 1.9

17 messages 2013/06/27

[#408528] Designing a Cabinet class — Mike Vezzani <lists@...>

Hello all,

12 messages 2013/06/27

[#408561] Find elment in array of hashes — Rodrigo Lueneberg <lists@...>

array = {:id=>1, :price =>0.25} # index[0]

23 messages 2013/06/28

Re: Is it a bug(about constant reference on dynamic class).

From: Gary Wright <gwtmp01@...>
Date: 2013-06-03 02:59:13 UTC
List: ruby-talk #407896
On Jun 1, 2013, at 5:35 PM, jin chizhong <lists@ruby-forum.com> wrote:

> When I use a dynamic class, It can not reference constants.
> See follow code and remark.

The reason is that your two examples have different lexical scopes and =
constants are resolved lexically.

> class T
>  def hello
>    puts self.class.constants.join " "    # right, AAA
>    puts AAA                              # right, 1
>  end
> end

Here, AAA is lexically within T so ruby searches T::AAA and ::AAA before =
giving up.

> T::AAA =3D 1
> t =3D T.new
> t.hello

You can see this by doing:

class Demo; def get_T; T; end; end
T =3D 'top'
Demo.new.get_T		# 'top'
Demo::T =3D 'demo'	# now there is ::T and Demo::T
Demo.new.get_T		# 'demo', because Demo::T is searched before ::T


> c =3D Class.new do
>  def hello
>    puts self.class.constants.join " "    # right, AAA
>    puts AAA          # error: uninitialized constant AAA (NameError)
>  end
> end

Here AAA is not lexically in a class so ruby *only* searches ::AAA =
before giving up, which is what you see below when you call inst.hello


> c::AAA =3D 123
> inst =3D c.new
> inst.hello

If you continue from this point:

puts c::AAA	# 123
AAA =3D 456	# set top level AAA
puts c:AAA	# still 123
c.new.hello	# 456 because AAA in hello now finds AAA at the top =
level scope

I think the key to understanding this is to realize that constant lookup =
path is established when the code is parsed and not when the code is =
executed.

You asked if there is a way around this and there sort of is.  If you =
want to force the lookup to start in a particular module then say it =
explicitly:

c =3D Class.new do
 def hello
   puts self.class.constants.join " "    # right, AAA
   puts self.class::AAA                  # forces search to start in c
 end
end

Just to be a bit more complete, ruby also searches the superclasses of =
any class in the lexical scope:

class A
  def lookup_X
    X                  # X is resolved as A::X, ::X
  end
end

class B < A
  def lookup_X_from_B
    X                  # X is resolved as B::X, A::X, ::X
  end
end

A.new.lookup_X         # A::X, ::X
B.new.lookup_X         # still A::X, ::X even though called on instance =
of B
B.new.lookup_X_from_B  # B::X, A::X, ::X =20

Now try setting X =3D 1; A::X =3D 2, and B::X =3D 3 and see what the =
lookup methods return.


Gary Wright



In This Thread