#方法
こんな配列があったとする。
a = [1, 2, 3]
存在する値(1)を削除すると、その値が戻り値になる。
a.delete(1)
#=> 1
存在しない値(100)を削除しようとした場合はnilが返る。
a.delete(100)
#=> nil
ブロックを渡すと、指定した値が見つからない時の戻り値にすることができる。
a.delete(100) { '削除失敗' }
#=> "削除失敗"
#違和感
しかし、これがピンと来ない。
ブロックが戻り値になるのは、delete
できなかった時ではなく、成功した場合のように感じてしまう。
恐らく理由は2つ。
- if文の条件式と混同している
- 以前書いていたC#では、
remove
(Rubyのdelete
同様、配列から特定の要素を削除するメソッド)の戻り値がboolean
a = [1, 2, 3]
if a.delete(1)
p('削除成功')
end
#=> "削除成功"
そういうものだと割り切るしかないんだろうけど、混乱しそうなので備忘録として。