Issue #10475 has been updated by Jared Beck.


`flatten` also accepts `Float` values, apparently using `to_i` (aka. `truncate`) to convert to `Integer`.

    irb(main):008:0> arr.flatten(0.9)
    => [1, [2, [3, [4, 5]]]]
    irb(main):009:0> arr.flatten(1.1)
    => [1, 2, [3, [4, 5]]]
    irb(main):011:0> arr.flatten(-0.9)
    => [1, [2, [3, [4, 5]]]]
    irb(main):012:0> arr.flatten(-1.1)
    => [1, 2, 3, 4, 5]

Given that `to_i` (or something like it) is used on `Float` values, it's odd that `nil` is treated as `-1`, rather than `0`.


----------------------------------------
Bug #10475: Array#flatten should not accept a nil argument
https://bugs.ruby-lang.org/issues/10475#change-49984

* Author: Dov Murik
* Status: Open
* Priority: Normal
* Assignee: 
* Category: core
* Target version: 
* ruby -v: ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Currently `Array#flatten` accepts an explicit `nil` argument which has the same meaning as `-1` (or no arguemnt) - meaning endless recursive flattening. I'd expect `flatten` to accept an integer argument only (or not at all, with a default of `-1`).

Moreover, the behaviour of `arr.flatten(-1)` is not described in the method's documentation.

**Current behaviour** (Ruby 2.1.4):

~~~
2.1.4 :001 > arr = [1, [2, [3, [4, 5]]]]
 => [1, [2, [3, [4, 5]]]] 
2.1.4 :002 > arr.flatten
 => [1, 2, 3, 4, 5] 
2.1.4 :003 > arr.flatten(-1)
 => [1, 2, 3, 4, 5] 
2.1.4 :004 > arr.flatten(nil)
 => [1, 2, 3, 4, 5] 
~~~

**Expected behaviour**:

* The last call (`arr.flatten(nil)`) should raise ArgumentError exception.
* The -1 (as "indefinite") should be documented.

Note that this suggestion will break applications/gems that rely on the fact that `arr.flatten(nil)` is identical to `arr.flatten`.

I'd like to hear your opinions on this. If accepted, I'm willing to try and write a patch.




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