Prev: Calculation in a block
Next: Download version 1.8?
From: Eduardo Mucelli R. Oliveira on 4 May 2010 09:54 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 4 May 2010 10:50 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 4 May 2010 12:49 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 4 May 2010 15:05 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? |