Procの練習

なんだか,Procとかyeildとかを使いこなせるようになると,ハカーになれちゃうんじゃないかとか妄想しながら,今日はProcの練習です.

ふと試してみたもの

def foo (hoge, x)
  if x > 0
    hoge.call(x)
  else
    return 0
  end
end

hoge = Proc.new{|x|
  puts x**2
  x = x - 1
  foo hoge,x
}

foo hoge,5

実行結果です

$ ruby proc_test.rb 
25
16
9
4
1

とりあえずこんなのを書いたんだけど,スコープが!スコープがわかんない!ってなってしまいました.もう少し,何か試してみる.

こんどは,フィボナッチ.

hoge = Proc.new{|x,y,m|
  z = x + y
  m += 1
  print "#{z} "
  if m <= 15
    hoge.call(y,z,m)
  end
}

hoge.call(0,1,1)
puts

実行結果です

$ ruby proc_test2.rb 
1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 

うん,これはスコープで混乱しないぞ.

もういちど,Employee

昨日のを再利用して,今日得た知識で持って,何か楽しい事が出来ないか模索.
とりあえず,簡単な所から.

require 'employee'

emps = []
emps[0] = Employee.new("noa",false,200)
emps[1] = Employee.new("gotou",true,320)
emps[2] = Employee.new("asuma",false,210)
emps[3] = Employee.new("nagumo",true,300)

isManager = Proc.new{|e|
  puts e.isManager
}

isManager.call(emps[0])
isManager.call(emps[1])
isManager.call(emps[2])
isManager.call(emps[3])

実行結果です

$ ruby proc_test3.rb 
false
true
false
true

うん,これは予想通りです.良かった.で,これをやったらもう限界ってのに気づいた.もうEmployeeで引っ張れそうなネタが思いつかないので,また何か思いつくまでEmployeeはお蔵入り.とりあえず,今日はコレまで.また明日,何か思いついたらProcネタを.