今日はp140まで。
さて、勉強した内容です。
・defの外側の変数は内側からは見られない。
↓みたいなのはダメ。
value="test"
def func
p value
end
func
JavaScriptダイスキな私には意外です。
・Procで処理ブロックをオブジェクト化できる。
proc = Proc.new do p 1+1 end
proc.call
こんな風に。
んー。でも、Proc.newってProcオブジェクトのインスタンス化ですよね?
だったら、↓みたいに書けると思ったんだけれども、エラーになる。
proc = Proc.new(do p 1+1 end)
proc.call
不思議。誰か知っていたら教えて下さい。
・クロージャーって、オブジェクトがあればいらなくね?
処理ブロックは外側で定義された変数を見れる。処理ブロックが有効なうちはその変数も有効で、同じ変数が生き続けるので、以下の様なことができる。
def createCountupProc
value = 0
return Proc.new do
p value+=1
end
end
countupProc = createCountupProc;
3.times() do countupProc.call end
→1、2、3って表示される。コレをクロージャーって言うらしいけれど。。。
オブジェクトがあれば、コレ要らなく無いですか?
Javaでもクロージャーの導入が検討されているらしいですが、どう使うんだろう?
・文字の配列列を作るとき、%wが便利
words = %w[word1 word2 word3]
words.each() do |word| p word end
""をつけなくても、文字列をつくれる。が、読みにくいなぁ。。。。
・block_given?で処理ブロックが与えられたかを確認できる。
関数に処理ブロックを与えることができることは昨日やりました。
で、処理ブロックが与えられたかをblock_given?で確認できます。
def func
if block_given?
yield()
else
p "block not given"
end
end
func do p "block give"
end
func
0 件のコメント:
コメントを投稿