Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
about instance_eval
Kyung won Cheon
11/11/2008 2:49:00 PM
class A
WHY = "I don't know why!!"
def self.foo
WHY
end
end
puts A.instance_eval("foo") # => I don't know why!!
puts A.instance_eval("WHY") # => uninitialized constant Class::WHY
(NameError)
# What's difference?
# Help Me^^
--
Posted via
http://www.ruby-...
.
1 Answer
Mike Gold
11/11/2008 3:35:00 PM
0
Kyung won Cheon wrote:
> class A
> WHY = "I don't know why!!"
>
> def self.foo
> WHY
> end
> end
>
> puts A.instance_eval("foo") # => I don't know why!!
> puts A.instance_eval("WHY") # => uninitialized constant Class::WHY
> (NameError)
>
> # What's difference?
> # Help Me^^
A.instance_eval { foo } # => "I don't know why!!"
A.instance_eval { constants } # => ["WHY"]
A.instance_eval { const_get "WHY" } # => "I don't know why!!"
class A ; eval "WHY" ; end # => "I don't know why!!"
Constants follow different rules for lookup.
instance_eval changes the 'self' for method lookups, but you are still
in the top-level scope for constant lookups. You must be inside "class
A" (or "module A") to get the constant lookup of WHY == A::WHY.
Note the complementary case,
B = Class.new {
WHEREAMI = "here"
}
WHEREAMI # => "here"
Despite being defined inside the instance of B, this constant lies in
the top-level scope.
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
about instance_eval
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password