Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Small functions to functionally augment ruby. (github.com/thoughtnirvana)
33 points by irahul on Sept 9, 2011 | hide | past | favorite | 7 comments


I wrote a similar thing a few months ago.

https://github.com/stefanpenner/rebinder/blob/master/lib/reb...

My syntax was far more sarcastic and less legitimate, however. eg:

    add = Fixnum.☃.+
    add3 = add.∂(3)
    assert_equal 7, add3.☏(4)
The fun bit is that this implementation doesn't actually use lambdas, but rather (Unbound)Method instances.


Naive fibonacci is a much more interesting example for memoize than factorial:

    fib = +lambda {|n| return 1 if n <= 1; fib[n-2] + fib[n-1]}


Yes. I added that to tests and README. Except that I have

    fib = +lambda {|n| return n if n <= 1; fib[n-1] + fib[n-1] }
My fibonacci is 0, 1, 1, 2, 3.. and yours is 1, 1, 2, 3... but doesn't make a difference as far as example goes.


What's with the [] notation? Isn't there a way to "overload" the () in ruby? I.e.

(sqr * inc)(5) ?


Welcome to Ruby - Ruby has procs, blocks, lambdas, methods which are similar yet different.

Blocks aren't objects - when they are converted to objects, they become procs. Procs are like blocks and lambdas are like methods, but you can't call either of them with () syntax.

And then there are multiple ways to call them:

  f.call()
  f[]
  f.()
Take your pick.


No. The (sqr * inc) part returns a lambda, and in order to call a lambda you need to either .call() it, or you can use the [] syntax.


Nope. Whenever you use (), the parser assumes a method call. sqr, inc and (sqr * inc) are not methods (but Proc objects), and all you can do is call _their_ methods, such as [].




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: