Project

General

Profile

Actions

Bug #5747

closed

Proc#curry doesn't always detect too many arguments

Added by marcandre (Marc-Andre Lafortune) almost 13 years ago. Updated almost 12 years ago.

Status:
Closed
Target version:
ruby -v:
-
Backport:
[ruby-core:41597]

Description

Currently, Proc#curry checks the validity of the arity argument and will raise an error if:

  1. arity is less than the number of required arguments or
  2. arity is more than the maximum number of arguments
    Note that simple Procs always accept any number of arguments (even though they may be ignored), so (2) doesn't applies to them, only to lambda's and procs made from methods.

#2 isn't done as well as it could in case of limited optional parameters:

def Object.foo(a, b=42); end
def Object.bar(a, b);    end

Object.method(:foo).to_proc.curry(3) # => curried proc which will raise an error only when passed it's 3rd parameter
Object.method(:bar).to_proc.curry(3) # => ArgumentError: wrong number of arguments (3 for 2)

Same thing with lambdas

My proposed fix passes SST:
a) usefulness: "fail-early" principle [ruby-core:24130]
b) consistency: both methods can only accept a maximum of 2 parameters and are thus treated consistently when attempting to curry with more than 2 arguments
c) intuitiveness and d) performance: similar

It is straightforward (but not obvious), as it passes NIT (but not ODT).


Related issues 1 (0 open1 closed)

Blocked by Ruby master - Bug #6085: Treatment of Wrong Number of ArgumentsClosedmame (Yusuke Endoh)02/25/2012Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0