Class: Proc
- Defined in:
- lib/backports/1.9.1/proc/curry.rb,
lib/backports/1.9.1/proc/lambda.rb,
lib/backports/2.6.0/proc/compose.rb,
lib/backports/1.9.1/proc/case_compare.rb
Instance Method Summary collapse
- #<<(g) ⇒ Object
- #>>(g) ⇒ Object
- #curry(argc = nil) ⇒ Object
-
#lambda? ⇒ Boolean
Standard in Ruby 1.9.
Instance Method Details
#<<(g) ⇒ Object
3 4 5 6 7 8 9 |
# File 'lib/backports/2.6.0/proc/compose.rb', line 3 def <<(g) if lambda? lambda { |*args, &blk| call(g.call(*args, &blk)) } else proc { |*args, &blk| call(g.call(*args, &blk)) } end end |
#>>(g) ⇒ Object
11 12 13 14 15 16 17 |
# File 'lib/backports/2.6.0/proc/compose.rb', line 11 def >>(g) if lambda? lambda { |*args, &blk| g.call(call(*args, &blk)) } else proc { |*args, &blk| g.call(call(*args, &blk)) } end end |
#curry(argc = nil) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/backports/1.9.1/proc/curry.rb', line 5 def curry(argc = nil) min_argc = arity < 0 ? -arity - 1 : arity argc ||= min_argc if lambda? and arity < 0 ? argc < min_argc : argc != arity raise ArgumentError, "wrong number of arguments (#{argc} for #{min_argc})" end creator = lambda? ? :lambda : :proc block = send(creator) do |*args| if args.size >= argc call(*args) else send(creator) do |*more_args| args += more_args block.call(*args) end end end end |
#lambda? ⇒ Boolean
Standard in Ruby 1.9. See official documentation
6 7 8 |
# File 'lib/backports/1.9.1/proc/lambda.rb', line 6 def lambda? !!__is_lambda__ end |