[#10209] Market for XML Web stuff — Matt Sergeant <matt@...>

I'm trying to get a handle on what the size of the market for AxKit would be

15 messages 2001/02/01

[#10238] RFC: RubyVM (long) — Robert Feldt <feldt@...>

Hi,

20 messages 2001/02/01
[#10364] Re: RFC: RubyVM (long) — Mathieu Bouchard <matju@...> 2001/02/05

[#10708] Suggestion for threading model — Stephen White <spwhite@...>

I've been playing around with multi-threading. I notice that there are

11 messages 2001/02/11

[#10853] Re: RubyChangeRequest #U002: new proper name for Hash#indexes, Array#indexes — "Mike Wilson" <wmwilson01@...>

10 messages 2001/02/14

[#11037] to_s and << — "Brent Rowland" <tarod@...>

list = [1, 2.3, 'four', false]

15 messages 2001/02/18

[#11094] Re: Summary: RCR #U002 - proper new name fo r indexes — Aleksi Niemel<aleksi.niemela@...>

> On Mon, 19 Feb 2001, Yukihiro Matsumoto wrote:

12 messages 2001/02/19

[#11131] Re: Summary: RCR #U002 - proper new name fo r indexes — "Conrad Schneiker" <schneik@...>

Robert Feldt wrote:

10 messages 2001/02/19

[#11251] Programming Ruby is now online — Dave Thomas <Dave@...>

36 messages 2001/02/21

[#11469] XML-RPC and KDE — schuerig@... (Michael Schuerig)

23 messages 2001/02/24
[#11490] Re: XML-RPC and KDE — schuerig@... (Michael Schuerig) 2001/02/24

Michael Neumann <neumann@s-direktnet.de> wrote:

[#11491] Negative Reviews for Ruby and Programming Ruby — Jim Freeze <jim@...> 2001/02/24

Hi all:

[#11633] RCR: shortcut for instance variable initialization — Dave Thomas <Dave@...>

13 messages 2001/02/26

[#11652] RE: RCR: shortcut for instance variable initialization — Michael Davis <mdavis@...>

I like it!

14 messages 2001/02/27

[#11700] Starting Once Again — Ron Jeffries <ronjeffries@...>

OK, I'm starting again with Ruby. I'm just assuming that I've

31 messages 2001/02/27
[#11712] RE: Starting Once Again — "Aaron Hinni" <aaron@...> 2001/02/27

> 2. So far I think running under TextPad will be better than running

[#11726] Re: Starting Once Again — Aleksi Niemel<zak@...> 2001/02/28

On Wed, 28 Feb 2001, Aaron Hinni wrote:

[ruby-talk:11556] Re: Bottles of Beer finally in Ruby

From: "Robert Gustavsson" <robert.gustavsson@...>
Date: 2001-02-26 00:40:03 UTC
List: ruby-talk #11556
"Wayne Scott" <wscott@ichips.intel.com> wrote in message
news:20010223143609K.wscott@ichips.intel.com...

First I must say that this is no critique on your way of coding Ruby. I just
used it as an excercise in re-factoring Ruby code (and learning/training
Ruby in general). Anyone, feel free to comment and suggest improvements.

Your version:
---
class Fixnum
    def to_s
      "%d bottle#{self ==1 ? '' : 's'} of beer" % self
    end
end

c = 100
while c.nonzero?
  print "#{c} on the wall,\n"
  print "#{c},\n"
  print "Take one down, pass it around,\n"
  c -= 1
  print "#{c} on the wall\n\n"
end
print "*burp*\n"
---

My version #1:
---
def b( num )
 num.to_s + " bottle" + (num == 1 ? "" : "s") + " of beer"
end

100.downto(1) { |c|
  puts "#{b(c)} on the wall,"
  puts "#{b(c)},"
  puts "Take one down, pass it around,"
  puts "#{b(c-1)} on the wall"
  puts ""
}
puts "*burp*"
---

* I don't like the overriding of Fixnum just for formatting a special string
(unique for this special app). Changed it to a method that returns the
correct "N bottle[s] of beer" string.
* "c = 100, while c -=1 ..." is IMO better expressed with 100.downto
* Improved the readability by using puts instead of print. puts
automatically appends "\n" but beware that puts x and print "#{x}\n" are
only (almost?) identical when there's only one string.
* Didn't like the % method call (because my Ruby knowledge on the % method
is nearly nil) and I think my way of doing it is more readable and
newbie-friendly.

My version #2:
---
def b( num )
 num.to_s + " bottle" + (num == 1 ? "" : "s") + " of beer"
end

def beer( numberOfBeers )
 numberOfBeers.downto(1) { |c|
  yield "#{b(c)} on the wall,\n#{b(c)},\nTake one down, pass it
around,\n#{b(c-1)} on the wall\n"
 }
end

beer( 100 ) { |line| print line, "\n" }
puts "*burp*"
puts "*rap*"
---

* But one cool thing I've picked up is iterators. I re-wrote it (and made it
not so newbie-friendly) but using an iterator. Re-implemented the "\n"
stuff. Now the beer method is a kind of generator. Pass in 50 to beer and it
will count from 50 to 0.
* Yes, I know that the yield is a bit (quite a big bit) unreadable. I just
wanted to see how compact I could make it. Compactness is not always a good
thing (ever?). Especially not when it comes to maintenance.
* Made it a bit bilingual (it now also burps in Swedish) :-)

/rob



In This Thread