Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.ruby > #3191
| From | Felipe Balbi <balbif@gmail.com> |
|---|---|
| Newsgroups | comp.lang.ruby |
| Subject | Re: Making a simple parser |
| Date | 2011-04-19 16:03 -0500 |
| Organization | Service de news de lacave.net |
| Message-ID | <ce32238c179ca9dec47c6270e291f92c@ruby-forum.com> (permalink) |
| References | <87adbac7061a00a72e282c160ed42414@ruby-forum.com> <BANLkTi=4eHATM9H902di1y5mjcbRS5dO-g@mail.gmail.com> |
Hi,
"Jesús Gabriel y Galán" <jgabrielygalan@gmail.com> wrote in post
#993452:
> On Sat, Apr 16, 2011 at 9:52 PM, Felipe Balbi <balbif@gmail.com> wrote:
>>
>> @children.each { |child|
>> def supported?
>>
>> input = InputFormat.new(ARGV[0])
>> input.parse
>>
>> As it turns out, this isn't working because AInputFormat will only
>> inherit from InputFormat at the time I actually use it, am I right ? Any
>> tips you guys could give me to achieve what I want ? (from several
>> possible input formats generate one output format)
>
> The above doesn't work, because the @children inside the instance
> method "parse" is not the same as the @children inside the class
> method "self.inherited". You have to give access to the class instance
> variable, and then use that one from the parse method (the you will
aaa, you're right :-) Good point.
> see the next problem):
>
> class InputFormat
> class << self
> attr_accessor :children
> end
>
> def initialize(input)
> @input = input
> end
>
> def parse
> self.class.children.each {|child| child.parse(@input) if
> child.supported?(@input)}
> end
>
> def self.inherited(child)
> (@children ||= []) << child
> end
> end
>
> class AInputFormat < InputFormat
> def supported?
> # check if we can parse this type of file
> end
>
> def parse
> # parse and generate array of hashes in known format
> end
> end
>
> ruby-1.8.7-p334 :028 > input = InputFormat.new("test")
> => #<InputFormat:0xb738bf50 @input="test">
> ruby-1.8.7-p334 :029 > input.parse
> NoMethodError: undefined method `supported?' for AInputFormat:Class
> from (irb):11:in `parse'
> from (irb):11:in `each'
> from (irb):11:in `parse'
> from (irb):29
>
> The next problem, as you see, is that you are defining instance
> methods in the subclasses, but are calling them on the class. Maybe
> the methods parse and supported? in the children could be class
> methods, or maybe what you store in @children could be an instance of
> the class.
I'm not instantiating AInputFormat in any part of the code... so making
those
class methods is the way to go for me :-) Thanks for the tip :-)
--
balbi
--
Posted via http://www.ruby-forum.com/.
Back to comp.lang.ruby | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Making a simple parser Felipe Balbi <balbif@gmail.com> - 2011-04-16 14:52 -0500
Re: Making a simple parser 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-16 22:31 -0500
Re: Making a simple parser jake kaiden <jakekaiden@yahoo.com> - 2011-04-17 12:01 -0500
Re: Making a simple parser Felipe Balbi <balbif@gmail.com> - 2011-04-17 15:22 -0500
Re: Making a simple parser jake kaiden <jakekaiden@yahoo.com> - 2011-04-17 21:10 -0500
Re: Making a simple parser Jesús Gabriel y Galán <jgabrielygalan@gmail.com> - 2011-04-18 02:22 -0500
Re: Making a simple parser Felipe Balbi <balbif@gmail.com> - 2011-04-19 16:03 -0500
Re: Making a simple parser 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-18 13:24 -0500
Re: Making a simple parser 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-18 15:22 -0500
csiph-web