search
LoginSignup
0

More than 5 years have passed since last update.

posted at

配列操作で「引数で指定した値が見つからない場合」の戻り値を指定する方法

方法

こんな配列があったとする。

a = [1, 2, 3]

存在する値(1)を削除すると、その値が戻り値になる。

a.delete(1)
#=> 1

存在しない値(100)を削除しようとした場合はnilが返る。

a.delete(100)
#=> nil

ブロックを渡すと、指定した値が見つからない時の戻り値にすることができる。

a.delete(100) { '削除失敗' }
#=> "削除失敗"

違和感

しかし、これがピンと来ない。
ブロックが戻り値になるのは、deleteできなかった時ではなく、成功した場合のように感じてしまう。
恐らく理由は2つ。

  1. if文の条件式と混同している
  2. 以前書いていたC#では、remove(Rubyのdelete同様、配列から特定の要素を削除するメソッド)の戻り値がboolean
a = [1, 2, 3]

if a.delete(1)
  p('削除成功')
end

#=> "削除成功"

そういうものだと割り切るしかないんだろうけど、混乱しそうなので備忘録として。

参考

プロを目指す人のためのRuby入門

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0