While reading this controversial link bait, consider buying my product/service
Learning Ruby: Methods vs Procs (or Ruby vs Python?)
I have been meaning to learn ruby for a while and the place I am working now uses a lot so I had another look at it. I read Learn To Program, a simple but good book and found the bit on blocks and procs etc pretty good and wanted to see if I could do the stuff in Python as well. Python has anonymous “lambda” functions but they are limited to one line a subset of the syntax which is a bit annoying sometimes. My worry with methods in Ruby is that they are not first class, I think because you can omit parenthesis and so you have no way of referring to them without invoking them.
I remembered this while reading the SICP book, the question was about the difference between this program in applicative and normal order evaluation
It rang a bell as (define (p) p) does not go into an infinite loop if you invoke p. In lisp (p) calls the procedure p with no arguments whereas p is just a reference to the function. In python someinstance.method refers to the method, someinstance.method() calls it, Ruby seems to need Proc objects to get around this (IMHO as a beginner)
I redid all the examples from the book in Python
This uses decorators, a nice Python feature that uses higher order functions (and the fact functions are first class in python).
IMHO, at this point in my experience of Ruby, with all the disclaimers about my non expert status etc.
No restriction on complexity of anonymous functions
Methods being different from Procs/Blocs, non-uniform syntax
Leaving out parenthesis (though I await DSL goodness later!)
“end” everywhere (I know the indentation thing in python is contentious!)