タグ

ブックマーク / shuzo-kino.hateblo.jp (2)

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

    以前の記事で盛大にドヤリングした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とfirs

    某「rubyでcdrっぽい事したい? drop使えば良いんじゃないですか?(鼻ホジ」 ぼく「……あっ」 - Bye Bye Moore
    kiyo_hiko
    kiyo_hiko 2016/05/16
    car = take(1)、cdr = drop(1) という話。便利。あとtake(1) だと list car、first だと car という話
  • Structクラスを継承してはいけない(戒め - Bye Bye Moore

    以前書いたStructで構造体なデータを扱う - Bye Bye Mooreという記事で class Point < Struct.new(:x, :y) def +(other_object) Point.new(x + other_object.x, y + other_object.y) end end とか書いていました。 が、公式リファレンスには 無名クラスのサブ クラスを作成する方法でカスタマイズする場合は無名クラスが使用されなくなっ てしまうことがあるためです。 との記述があり上記の方法は推奨されません。 どうしても拡張する必要がある場合 Point = Struct.new(:x,:y) do def +(other_object) Point.new(x + other_object.x, y + other_object.y) end end としてあげるのがよいです。

    Structクラスを継承してはいけない(戒め - Bye Bye Moore
    kiyo_hiko
    kiyo_hiko 2016/01/28
    Clazz < Struct.new(:attribute); def method() ... end; end ではなく Clazz = Struct.new(:attribute) do; def method() ... end; end な感じがいいという話
  • 1