callables/curried_shapes_parens.rb
tests/_examples/callables/curried_shapes_parens.rb in the metorex repository.
# A curried callable stands for the library's own: it names no arguments of
# its own and has no scope behind it. A hash may take a callable as its
# default, and anything that spells itself out as one will do.
add = proc { |a, b| a + b }
curried = add.curry
p(curried.parameters)
p(curried.arity)
p(curried[1][2])
begin
curried.binding
rescue ArgumentError => trouble
p(trouble.class)
end
strict = lambda { |a, b, c| a + b + c }
p(strict.curry[1][2][3])
p(strict.curry.parameters)
class Spelled
def to_proc
proc { |held, key| "#{key} is missing" }
end
end
counted = Hash.new(42)
p(counted[:nothing])
counted.default_proc = Spelled.new
p(counted.default)
p(counted[:city])
counted.default_proc = nil
p(counted.default_proc)
p(counted[:town])
begin
counted.default_proc = 42
rescue TypeError => trouble
p(trouble.class)
end
begin
counted.default_proc = lambda { |only| only }
rescue TypeError => trouble
p(trouble.class)
end
Output:
[[:rest]]
-1
3
ArgumentError
6
[[:rest]]
42
nil
"city is missing"
nil
nil
TypeError
TypeError