Issue #9025 has been updated by phluid61 (Matthew Kerwin).


duerst (Martin Dürst) wrote:
> phluid61 (Matthew Kerwin) wrote:
> 
> > [...] I believe that the current message already conveys all the information required to comprehend it.  [...] the smallest amount of debugging will show [...]
> 
> Ruby is all about making it easier for the programmer. Even the smallest amount of debugging is too much when it can be eliminated by tweaking the error message.

I think that statement accidentally reached a point of absurdity by using a very precise definition of "debugging" that I don't share.

My argument is that the programmer still has to visit the erroneous line of code, inspect it, and probably modify it to have the correct number of arguments.  That amount of debugging is always required, and would be if the error message said "ArgumentError" or "ArgumentError: the method `freb' on a String object does not accept any arguments, however it was passed a Fixnum".

I agree that someone not familiar with more technical English writing might be confused by the "(1 for 0)" part, but only when reading it in isolation.  If the programmer sees the message, they have to fix it, in which case they are already in the code and can understand the message using contextual information (e.g. how many arguments there are in the call, what the API docs say about the function's arity and semantics, etc.);  if an end user sees the message, they don't have to understand it and couldn't do anything about it if they did, they just pass it on to the programmer verbatim as a bug report.
----------------------------------------
Feature #9025: Clarify the error message when calling a method with the wrong number of arguments
https://bugs.ruby-lang.org/issues/9025#change-42495

Author: Nerian (Gonzalo Rodríguez)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


Currently when calling a method with the wrong number of arguments we get a confusing error message:

    ArgumentError: wrong number of arguments (1 for 0)

That means that the method was meant to accept 0 arguments, but 1 was provided instead. This error message is confusing, and a large number of people had to search for its meaning. For example [1] has 11000 views.

I propose that we change the error message to something whose meaning is obvious. Examples:

*  ArgumentError: wrong number of arguments (expected: 1,  provided: 0)
*  ArgumentError: wrong number of arguments (1 instead of 0)

This ticket originated from this pull request: https://github.com/ruby/ruby/pull/367

[1] http://stackoverflow.com/questions/7537450/what-does-wrong-number-of-arguments-1-for-0-mean-in-ruby


-- 
http://bugs.ruby-lang.org/