On 02/28 02:59, nobu (Nobuyoshi Nakada) wrote: > > Issue #7982 has been updated by nobu (Nobuyoshi Nakada). > > Status changed from Open to Rejected > > =begin > Sorry, you can't use (({%i})) for (({rb_raise()})), (({rb_warn()})), and so on. > It's now used for (({Object}))s. > > Use (({%d})) instead. > =end The Changelog entry for this is: * vsnprintf.c (BSD_vfprintf): [EXPERIMENTAL] object representation in rb_enc_vsprintf(). [Feature #5896] There is no indication that %i is now handled differently than before. For a C programmer, overriding %i which has historically been used for integers is very confusing and error prone. It is true that ruby is not C, but this is a C API, and rb_raise's documentation in README.EXT states: void rb_raise(rb_eRuntimeError, const char *fmt, ...) :: Raises RuntimeError. The fmt is a format string just like printf(). I content that the format string syntax in ruby 2.0.0 is not "just like printf()". Maybe "similar to printf(), with the following exceptions: ..."? As this is still marked EXPERIMENTAL, it would be better if another letter that isn't already supported by printf(3) was used instead. At the very least, if you plan to continue the use of %i for object representation, there should be specific notes in the documentation. Thanks, Jeremy