サイト更新情報
[Categories]
agile | angularjs | barbecue | birthday | body scoop | car | chuork01 | dinner | domin life | drive | event | fes | fishing | friend | gunpla | javascript | life | lunch | photo | ps3 | rails | ruby event | sake | software-development | sports snowboard | study event | sushi | sweets | techmix-hokkaido | torne | travel | vegetable garden | vim | weight training | whiskey | work

Ogagaga Diary


2011年05月29日

メタプログラミングRubyの写経 第3章 ブロック

第3章 ブロック

呼び出し可能オブジェクトから続けました

コードを保管して、あとで呼び出す
  • Proc オブジェクト
    • 遅延評価
inc = Proc.new { |x| x + 1 }
# なんらかの処理
inc.call(2) # => 3
    • ブロックをProcに変換 lambda(),proc()
dec = lambda { |x| x - 1 }
dec.class # => Proc
dec.call(2) # => 1

lambda(),proc(),Proc.new()は基本的に自分の好きな物を使えば いいと書いてある。僕は

Proc.new

がしっくりくるようです。

&修飾

yield を使ってブロックを実行するけどyieldでは足りない場面が二つ

  • 他のメソッドにブロックを渡したいとき
  • ブロックをProcに変換したいとき
  • Proc をブロックに戻したいときにも使う
Proc 対 lambda
"Proc と lambda の違いは、おそらく Ruby でもっともややこしいところだろう"

との記述がありました。自分も普段ここらへんを避けがちなのもややこしくてよくわからん ということにとても納得。

"特別な場合がたくさんあるし、独断的で根拠のない区分もたくさんある。そんな流血現場にわざわざ立ち入る必要はない。しかし、大雑把でもいいから、違いを知っておく必要がある"

との記述がある。全くその通りだ...。この本に出会えたので最低限のことは理解したい。

"Proc と lambda には二つの違いがある。一つは、return キーワードに関する事。もう一つは、引数のチェックに関する事"
  • Proc と lambda と return

lambda では、return は単に lambda から戻るだけ。Proc の return は Proc から戻るのではなく、Proc が定義されたスコープから戻る

def another_double
  p = Proc.new { return 10 }
  result = p.call
  return result * 2  # unreachable code!
end
another_double # => 10
  • Proc と lambda と arity(項数)
p = Proc.new {|a, b| [a, b]}
p.arity # => 2

lambda のほうが Proc よりも引数の扱いに厳しい。項数を間違えてlambdaを呼び出すとArguentErrorになる。Procは引数を期待値に合わせてくれる。

p = Proc.new {|a, b| [a, b]}
p.call(1,2,3) # => [1,2]
p.call(1) # => [1, nil]
  • Proc 対 lambda:ジャッジメント
    • lambda の方がメソッドに似ているので、Procよりも直感的
    • 項数に厳しく、return を呼ぶと終了してくれる。
    • Rubyist の多くはProc の機能が必要でない限り、lambdaを最初に選ぶよう

どうやら僕はlambdaに慣れたほうが良さそうだ。

DSL を書く
def event(name)
  puts "ALERT: #{name}" if yield
end

Dir.glob('*events.rb').each {|file| load file }

event "an event that always happens" do
  true
end

event "an event that never happens" do
  false
end

true のだけ実行される

やっぱ複雑だのー。でも最後のDSLでの使い方は覚えておいて何かしらの機会に使いたい。


2015年05月29日

四文屋 北2条店 で500円ランチ食べました

同僚から四文屋ランチに誘われたので、初500円ランチしてきました。

ランチメニューは

  • ホエイ豚丼
  • 桜姫鶏焼き鳥丼
  • ホエイ豚バラ丼
  • もつ煮込みライス
  • ホエイ豚チャーシュー丼
  • 本日の日替わり丼
  • 牛サーロインステーキ丼(これだけ700円)

が選べます。

僕は、桜姫鶏焼き鳥丼を注文...!

夜と同じく炭火焼なので、大変美味しかったです。

500円で美味しい思いができるので、またランチに行こう。

桜姫鶏焼とり丼 500円 (@ 四文屋 札幌北2条店)

スーツ用の夏靴としてアシックスのtexcy luxe TU-7769(ブラック) 6,480円 を買いました

前から目をつけていたアシックスのビジネスシューズを買いました!

軽いし、安いし大変よいです。その分デザインは少ししょぼいですがね。

購入理由

  • 今年はスーツ着用シーンが増えた
  • 東京や名古屋へ出張する機会が多そう
  • フォーマル用の革靴が一足だけあり、これをビジネス用として使っていました(リーガルの靴でもったいないのとデザインはいいけど疲れる感じ)

凄い偉い人と会うわけでもないので、この靴で十分です。

パソコン等もそうですが、軽いのは正義!

スーツ時に履く靴を買いました。安いし軽くてよい。texcy luxe TU-7769(ブラック) 6,480円