in reply to (OT -- ruby) Re: Re: Favorite programming language, other than Perl:
in thread Favorite programming language, other than Perl:

I am one monk who feels strongly about Ruby -- strongly in favor. My main project right now (I'm a teenager -- no job) is in Ruby, so I've gotten to know if fairly well.

As to the lack of documentation. It's true that there's not a lot, but what's out there is good stuff. And the Pragmatic Programmer's guide may be a year old, but it most certainly is not a year out of date. After all, languages don't change that much.

It is possible to receive a block and then pass it on, it's just not introductory guide material. :-) Here's an example

class Foo def initialize #no initialization needed for this class end def bar(&block) self.baz(&block) end def baz yield(3) end end foo = { |n| puts n } # prints "3\n"
When you talk about adding a local variable that masks calls to an earlier added function of the same name, you forget something: Ruby is an object-oriented langauge. You're supposed to call functions on objects, which can't be confused with a variable. In a class definition, you call one of that class's methods like self.method or like method, which is merely a shortcut for the former. It calls that method with that instance from the class.

This was also discussed at Ruby: An Abbot breaks silencewind. If you haven't checked it out, check it out. It's not better or worse than Perl -- it's different, and I love them both.

elusion :

Replies are listed 'Best First'.
Re: Re: (OT -- ruby) Re: Re: Favorite programming language, other than Perl:
by educated_foo (Vicar) on May 11, 2002 at 03:09 UTC
    Re passing blocks: thanks. Got that part working.

    But about the other, I probably need to clarify a bit. The example in the doc was the following:

    def a   print "Function 'a' called\n"   99 end for i in 1..2   if i == 2     print "a=", a, "\n"   else     a = 1     print "a=", a, "\n"   end end
    Which prints:
    a=1 Function 'a' called a=99
    Frankly, I think that's perverse, and object-orientation won't save you. What if, instead of printing, you'd tried to call "a.blah"? Presumably you'd get the same sort of bizarre results.


      Sorry, you missed my point. Maybe some code will help. :-)
      class Foo def a puts "Function 'a' called" end end foo = (1..2).each do |i| if i == 2 print "a=", foo.a, "\n" else a = 1 print "a=", foo.a, "\n" end end
      which prints:
      Function 'a' called a=99 Function 'a' called a=99
      You see, functions are meant to belong to a class -- to be methods. Not that you can't declare functions that belong to the main class, but that's not what the design was for. So I guess if you're writing your code in a non-OO way, you could get stuck. But presumably your variable and function names will be better than 'a' :-).

      elusion :