[ruby-core:71379] [Ruby trunk - Bug #11417] Wrong description for `limit` parameter for IO#gets

From: antondavydov.o@...
Date: 2015-11-07 19:41:15 UTC
List: ruby-core #71379
Issue #11417 has been updated by Anton Davydov.


Ary hello!

The problem in japanise characters. They are represented by 3 bytes:

~~~
StringIO.new("こんにちは").gets(1) # => "こ"
StringIO.new("こんにちは").gets(2) # => "こ"
StringIO.new("こんにちは").gets(3) # => "こ"
StringIO.new("こんにちは").gets(4) # => "こん"
~~~

Also [I create RP](https://github.com/ruby/ruby/pull/1085) in ruby/ruby repository with updating `IO#gets` documentation.

----------------------------------------
Bug #11417: Wrong description for `limit` parameter for IO#gets
https://bugs.ruby-lang.org/issues/11417#change-54751

* Author: Ary Borenszweig
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
It says:

"If the first argument is an integer, or optional second argument is given, the returning string would not be longer than the given value in bytes."

But:

~~~
require "stringio"

io = StringIO.new "こんにちは"
string = io.gets(1)
puts string #=> "こ"
puts string.bytes.length #=> 3
~~~

The returning value number of bytes (3) is longer than the given value (1), so it contradicts the description.

I guess the implementation reads chars until the total number of bytes read is equal or bigger than the limit.

But I don't know how to describe this behaviour in a way that's clear to the user.




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

In This Thread

Prev Next