FunctionObject solves a problem of complex² callable¹ objects.
- By callable I mean something that
procin Ruby are examples of callable objects.
- By complex I mean something that requires sub-expressions. In other words, complex is when you need to express your
callmethod in terms of other (private) methods. In other words, complex is when you need
definside your lambda or/and need to extract it to separate unit. (So, the explanation of what is complex gone complex too :)
Add this line to your application's Gemfile:
And then execute:
Or install it yourself as:
$ gem install function_object
class Plus < FunctionObject args do arg :a arg :b end def call a + b end end Plus.call(1,2) # => 3 Plus.(1,2) # => 3 plus = Plus.new(1,2) # => #<Plus:0x00000002115e48 @a=1, @b=2> plus.() # => 3 Plus.curry.(1).(2) # => 3 Plus.curry.(1,2) # => 3
Or you can define it even simpler:
class Plus < FunctionObject args :a, :b def call a + b end end
Or mix these two styles (not recommended though):
class Plus < FunctionObject args :a do arg :b end def call a + b end end
After checking out the repo, run
bin/setup to install dependencies. Then, run
rake spec to run the tests. You can also run
bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run
bundle exec rake install. To release a new version, update the version number in
version.rb, and then run
bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the
.gem file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/marshall-lee/function_object.