Project

General

Profile

Actions

Bug #7837

closed

IO.open with three arguments where third argument is bogus reports an arity problem instead of type problem

Added by enebo (Thomas Enebo) about 11 years ago. Updated about 11 years ago.

Status:
Rejected
Assignee:
-
Target version:
ruby -v:
ruby 2.0.0dev (2013-02-08 trunk 39161) [x86_64-darwin11.4.2]
Backport:
[ruby-core:52162]

Description

I am reporting this against 2.0.rc2 but it also applies to mri 1.9.3. If I run the following one-liner:

mri20 -e 'f = File.open("tmp"); IO.open(f.fileno, "r", :heh)'

I get the error:

-e:1:in `initialize': wrong number of arguments (3 for 1..2) (ArgumentError)

This seems wrong because if I change the third argument to an options hash it works fine. So having an arity of 3 is not a problem for open. It is that :heh is not a hash. I think this should generate a TypeError.

Updated by drbrain (Eric Hodel) about 11 years ago

  • Category set to core
  • Target version set to 2.6

=begin
Since Ruby 1.9.3p374 has the same behavior I have marked this for next minor:

$ ruby19 -ve 'f = File.open("tmp"); IO.open(f.fileno, "r", :heh)'
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin12.2.1]
-e:1:in initialize': wrong number of arguments (3 for 1..2) (ArgumentError) from -e:1:in open'
from -e:1:in `'

=end

Updated by nobu (Nobuyoshi Nakada) about 11 years ago

  • Status changed from Open to Rejected

=begin
It's common behavior to keyword arguments,

$ ruby -e 'def foo(a, b, c:1);end' -e 'foo(2,3,42)'
-e:1:in foo': wrong number of arguments (3 for 2) (ArgumentError) from -e:2:in '

The optional argument hash is stripped before arity check, so it's "invisible" as arity.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0