Issue #9025 has been updated by Robb Shecter.


"(expected: 1, provided: 0)" is excellent. This is a big usability issue. Python's message is similar, and includes the function name:

`TypeError: fun() takes exactly 1 argument (0 given)`

> 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.

My experience is different. I have a computer science degree and 20 years' of experience, and I'm always frustrated by this error message. I'm never clear on which number is which. I even got it wrong a few minutes ago in a comment I left here: "Request for comments about error messages"  https://bugs.ruby-lang.org/issues/11295

I program in many languages, and I don't have the mental capacity to remember idiosyncracies like this. Finally, consider the Python example, above. This is how modern languages perform, and users' expectations are rightly geared to match.

Ruby's dynamic nature defeats mere static analysis which you suggest would fix this: looking at one's code, it is not always possible to know how manyarguments were passed.

I'll submit a Pull Request in order to make the conversation more concrete. 

----------------------------------------
Feature #9025: Clarify the error message when calling a method with the wrong number of arguments
https://bugs.ruby-lang.org/issues/9025#change-54518

* Author: Gonzalo Rodrguez
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
Currently when calling a method with the wrong number of arguments we get aconfusing 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



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