Scope

I have a script with those two following classes:

class String
def to_b
[“true”].include?(self.downcase)
end
end

class HereIWantUseToB
“string”.to_b
end

Ok, that works fine, the to_b method can be “seen” by
HereIWantToUseToB class. But I wanted to those two classes inside
another class, or module, like this:

class Everything

The two classes described above are here

end

module Everything

The two classes described above are here

end

Anyway, for both cases I have the message “NoMethodError: undefined
method `to_b’ for string.” What is the scope point in here, what is
the best way solve that so ?

2010/5/4 Eduardo Mucelli R. Oliveira [email protected]:

I have a script with those two following classes:

class String
def to_b
[“true”].include?(self.downcase)
end
end

Why are you doing it so complicated? Why not just this:

def to_b
“true” == downcase
end

class HereIWantUseToB
“string”.to_b
end

You are using #to_b on a string constant that is not attached anywhere
(e.g. as class or instance variable). What exactly are you trying to
do?

end

Anyway, for both cases I have the message “NoMethodError: undefined
method `to_b’ for string.” What is the scope point in here, what is
the best way solve that so ?

Please show the complete code that leads to the error.

Kind regards

robert

On Tue, May 4, 2010 at 9:55 AM, Eduardo Mucelli R. Oliveira
[email protected] wrote:

I have a script with those two following classes:

class String
def to_b
[“true”].include?(self.downcase)
end
end

This opens up the system class String (or ::String if you prefer to
explicitly specify the outer scope) and adds an instance method
available to any instance of ::String

The two classes described above are here

end

module Everything

The two classes described above are here

end

Either

class Everything
class String
#…
end
end

or

module Everything
class String
#…
end
end

creates a new class Everything::String, which is unrelated to ::String

Anyway, for both cases I have the message “NoMethodError: undefined
method `to_b’ for string.” What is the scope point in here,

A string literal, like "string’, or “foo” will ALWAYS be an instance
of ::String, and never an instance of Everything::String


Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Github: rubyredrick (Rick DeNatale) · GitHub
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

On 4 maio, 13:49, Rick DeNatale [email protected] wrote:

end

The two classes described above are here

or

method `to_b’ for string." What is the scope point in here,
WWR:http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn:http://www.linkedin.com/in/rickdenatale

Thanks, that solved my scope doubt.