Feature #5558

String#% strange arity errors

Added by trans (Thomas Sawyer) over 6 years ago. Updated 3 months ago.

Target version:


When the number of arguments do not match the number of % parameters, the String#% method has some odd behavior.

When too many, it seems to work fine, ignoring the extra arguments.

"%s" % [1,2] #=> "1"

But if $DEBUG = true,

"%s" % [1,2] #=> ArgumentError: too many arguments for format string

That doesn't seem right. Is it an error or isn't it?

For too few arguments it is always an error:

"%s" % [] #=> ArgumentError: too few arguments

Personally, I think it should use '' for missing arguments. That would make it more flexible in practice.

I consider the first $DEBUG issue a bug, and the later a feature. But I'll just call it a feature altogether to make things easier.


#1 [ruby-core:43740] Updated by mame (Yusuke Endoh) almost 6 years ago

  • Status changed from Open to Assigned
  • Assignee set to matz (Yukihiro Matsumoto)

This behavior is certainly intended. See .

There is another example that behavior changes whether it is
debug mode or not: Thread#abort_on_exception. { raise }
sleep 1

The above will terminate normally without -d.
But it will blow up with -d.
So, we should know that -d affects the behavior, IMO.

Yusuke Endoh

#2 Updated by mame (Yusuke Endoh) over 5 years ago

  • Target version set to 2.6

#3 Updated by naruse (Yui NARUSE) 3 months ago

  • Target version deleted (2.6)

Also available in: Atom PDF