From: Bjarke Walling Date: 2006-11-29T07:20:08+09:00 Subject: "yield" and "old-way iteration" Hi, I am new to Ruby, but I find the language easy to learn and use. However I have some code that I think could be written smarter. I am writing a lexer and parser for a small language I have created. The first part splitting some input into tokens was easy to write using "yield" (20 lines or so). I was actually a little overwhelmed how easy it was. The next part is to examine these tokens and parse them into language structures. I want to create a class with "current" and "next" methods to get the current token and fetch the next (advance the pointer). I have solved it by using the first lexer yielding tokens and collecting them in an array. Afterwards I can fetch tokens from the array. But could it be done in a smarter way? My code is like this: class FirstParse def initialize ... end def each ... yield tokens ... end end class SecondParse def initialize @tokens = [] @index = 0 first_parse = FirstParse.new for token in first_parse @tokens.add token end end def current @tokens[@index] end def next @index++ self.current end def read_structure1 ... read structures ... end def read_structure2 ... read structures ... end end Am I being to "Java'ish" or what do you think. It is not a big problem since the code works, but do I really need to load the tokens into an array first? - Bjarke Walling