LoginSignup
0
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入門

0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0