Arrayが期待される変数同士を足し合わせるとき、片方がnilの可能性がある場合の書き方


Array同士を足し合わせるときに、`+`
が使えるかと思うのですが、しかし、片方が`nil`だった場合に、`+`を行おうとすると、エラーが起きてしまいます。また似たようなメソッドであるところの`concat`も同じように`nil`が入ってくるとエラーが入ってくるかと思わます。

そこで、ある変数が二つあるとして、この片方が`nil`である可能性がある場合に、これらを安全に合わせたいと思っています。書き方としては、以下のような書き方があることはわかっています。

以下の事例では`a`は必ずArrayがセットされており、`b`には`nil`が入っている可能性がある場合とします:

[code]

    a = [1, 2, 3]
    b = nil # わかりやすくnilをセット
    
    c = a + b.to_a
    p c
    # output: [1, 2, 3]
    
    c = b.nil? ? a : a + b
    p c
    # output: [1, 2, 3]
    
    c = a.concat b || []
    p c
    # output: [1, 2, 3]
    
[/code]

とはいえ、もっとダイレクトに`nil`の可能性があってもArray同士を足し合わせることができる方法がありそうな気がしたのですが、もしそのような方法があれば教えて下さい




長めだけど、 map/reduce 感があるのでわかりやすいかも。

[code]

    a = [1, 2, 3]
    b = nil
    c = [3, 4, 5]
    d = [nil]; 
    
    [a, b, c, d].compact.reduce(:+) # 重複あり
    # => [1, 2, 3, 3, 4, 5, nil]
    
    [a, b, c, d].compact.reduce(:|) # 重複なし
    # => [1, 2, 3, 4, 5, nil]
    
[/code]




長めだけど、 map/reduce 感があるのでわかりやすいかも。

[code]

    a = [1, 2, 3]
    b = nil
    c = [3, 4, 5]
    d = [nil]; 
    
    [a, b, c, d].compact.reduce(:+) # 重複あり
    # => [1, 2, 3, 3, 4, 5, nil]
    
    [a, b, c, d].compact.reduce(:|) # 重複なし
    # => [1, 2, 3, 4, 5, nil]
    
[/code]

