From: Eduardo Mucelli R. Oliveira on
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 ?
From: Robert Klemme on
2010/5/4 Eduardo Mucelli R. Oliveira <edumucelli(a)gmail.com>:
> 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?

> 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 ?

Please show the complete code that leads to the error.

Kind regards

robert

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

From: Rick DeNatale on
On Tue, May 4, 2010 at 9:55 AM, Eduardo Mucelli R. Oliveira
<edumucelli(a)gmail.com> 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

>
> 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


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: http://github.com/rubyredrick
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

From: Eduardo Mucelli R. Oliveira on
On 4 maio, 13:49, Rick DeNatale <rick.denat...(a)gmail.com> wrote:
> On Tue, May 4, 2010 at 9:55 AM, Eduardo Mucelli R. Oliveira
>
> <edumuce...(a)gmail.com> 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
>
>
>
>
>
> > 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
>
> 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:http://github.com/rubyredrick
> Twitter: @RickDeNatale
> WWR:http://www.workingwithrails.com/person/9021-rick-denatale
> LinkedIn:http://www.linkedin.com/in/rickdenatale

Thanks, that solved my scope doubt.
 | 
Pages: 1
Prev: Calculation in a block
Next: Download version 1.8?