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ネタを.