Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

某「rubyでcdrっぽい事したい? drop使えば良いんじゃないですか?(鼻ホジ」 ぼく「……あっ」

以前の記事で盛大にドヤリングしたsliceを用いたcdrモドキ。
ところがドッコイ、もっとマトモな方法がありました。
carはtake(1)あるいいはfirst、cdrはdrop(1)で代用できてしまします。

> ary = (1..10).to_a
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

> ary
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

> ary.drop(1)
#=> [2, 3, 4, 5, 6, 7, 8, 9, 10]

> ary.take(1)
#=> [1]

> ary.first
#=> 1

> ary
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ぱっと見でやりたい事がわかります。
その上、どちらも非破壊オンリーなので、以前よりcarやcdrと近くなりました。

takeとfirstの違い

> ary.take(1).class
#=> Array

> ary.first.class
#=> Fixnum

carはリストの先端の要素を返してくるメソッドです。
なので、firstを使うのが正しいと思われます。