Issue #12482 has been updated by Eike Dierks.


OK, that change would break the spec.
I do understand that breaking the spec something that we rarely want to do.

I found a workaround:
    ArgumentError.new([arg]) # wrap arg in Array to give a better error message when arg is nil
works for me.

But I still hold on with my request.
I believe the spec should be changed in this case.

The spec checks the stringification of the exception.
To my believe, no serious code should rely on this.

However there might be some existing code that relies on the stringification in localizations.

But changing the stringification would help there as well.

We can currently not diffferentiate between ArgumentError.new() and ArgumentError.new(nil),
as both result in the same error message.

I'd like to suggest to change the spec.
(it should not be graved in stone on this)









----------------------------------------
Feature #12482: ArgumentError.new(nil) should give a better description
https://bugs.ruby-lang.org/issues/12482#change-59245

* Author: Eike Dierks
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
Currently:

~~~ruby
ArgumentError.new(nil)  =>  #<ArgumentError: ArgumentError>
ArgumentError.new(nil).to_s => "ArgumentError"
ArgumentError.new(nil).inspect => "#<ArgumentError: ArgumentError>"

~~~

I want to suggest to change this to "ArgumentError(nil)" instead.

Rational:

For testing arguments, I frequently use:

~~~ruby
raise ArgumentError.new(arg) unless ExpectedClass === arg
~~~

However when arg is nil, this raises "ArgumentError" while raising "ArgumentError(nil)" would be much nicer.

This would differentiate between `ArgumentError.new()` and `ArgumentError.new(nil)`

Suggested changes

It looks like `ArgumentError#initialize` inherits Exception#initialize

I'd like to suggest to differentiate between Exception.new() and Exception.new(nil)

~~~ruby
def Exception.new(msg = :__Exception_msg_arg_undefined___)
  case arg
  when :__Exception_msg_arg_undefined___
    # msg = "ClassName"
  when nil
    # msg = "ClassName(nil)" 
  end
~~~

Impact

I believe this should not break existing code as no code should rely on the string returned.
















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

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>