kind=defined
names=flatten,flatten!
visibility=public

--- flatten(lv = nil)     -> Array
--- flatten!(lv = nil)    -> self | nil

flatten は自身を再帰的に平滑化した配列を生成して返します。flatten! は
自身を再帰的かつ破壊的に平滑化し、平滑化が行われた場合は self をそうでない
場合は nil を返します。
lv が指定された場合、lv の深さまで再帰的に平滑化します。

@param lv 平滑化の再帰の深さを整数で指定します。nil を指定した場合、再帰の深さの制限無しに平滑化します。

@raise ArgumentError 配列要素が自身を含むような無限にネストした配列に対して flatten を呼んだ場合に発生します。

    # 自身を再帰的に平滑化する例。
    a = [1, [2, 3, [4], 5]]
    p a.flatten                     #=> [1, 2, 3, 4, 5]
    p a                             #=> [1, [2, 3, [4], 5]]

    # 自身を破壊的に平滑化する例。
    a = [[[1, [2, 3]]]]
    p a.flatten!                    #=> [1, 2, 3]
    p a                             #=> [1, 2, 3]

    # 平滑化が行われない場合は nil を返す。
    p [1, 2, 3].flatten!            #=> nil
 
    # 平滑化の再帰の深さを指定する例。
    a = [ 1, 2, [3, [4, 5] ] ]
    a.flatten(1)              #=> [1, 2, 3, [4, 5]]

