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 ?

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

···

2010/5/4 Eduardo Mucelli R. Oliveira <edumucelli@gmail.com>:

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

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

···

On Tue, May 4, 2010 at 9:55 AM, Eduardo Mucelli R. Oliveira <edumucelli@gmail.com> wrote:

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

Thanks, that solved my scope doubt.

···

On 4 maio, 13:49, Rick DeNatale <rick.denat...@gmail.com> wrote:

On Tue, May 4, 2010 at 9:55 AM, Eduardo Mucelli R. Oliveira > > <edumuce...@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:rubyredrick (Rick DeNatale) · GitHub
Twitter: @RickDeNatale
WWR:http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn:http://www.linkedin.com/in/rickdenatale