* io.c (rb_io_puts): warn if write method accepts just one
  argument.  [ruby-core:83529] [Feature #14042]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-10-25 12:04:53 +00:00
Родитель ca9c9001dc
Коммит 237901a41b
2 изменённых файлов: 23 добавлений и 0 удалений

7
io.c
Просмотреть файл

@ -1690,6 +1690,13 @@ static VALUE
rb_io_writev(VALUE io, int argc, VALUE *argv) rb_io_writev(VALUE io, int argc, VALUE *argv)
{ {
if (argc > 1 && rb_obj_method_arity(io, id_write) == 1) { if (argc > 1 && rb_obj_method_arity(io, id_write) == 1) {
if (io != rb_stderr && RTEST(ruby_verbose)) {
VALUE klass = CLASS_OF(io);
char sep = FL_TEST(klass, FL_SINGLETON) ? (klass = io, '.') : '#';
rb_warning("%+"PRIsVALUE"%c""write is outdated interface"
" which accepts just one argument",
klass, sep);
}
do rb_io_write(io, *argv++); while (--argc); do rb_io_write(io, *argv++); while (--argc);
return argv[0]; /* unused right now */ return argv[0]; /* unused right now */
} }

Просмотреть файл

@ -2458,6 +2458,22 @@ End
end) end)
end end
def test_puts_old_write
capture = String.new
def capture.write(str)
self << str
end
capture.clear
assert_warning(/[.#]write is outdated/) do
stdout, $stdout = $stdout, capture
puts "hey"
ensure
$stdout = stdout
end
assert_equal("hey\n", capture)
end
def test_display def test_display
pipe(proc do |w| pipe(proc do |w|
"foo".display(w) "foo".display(w)