2012年11月1日木曜日

4日目:色々な書き方がありますねぇ。Rubyって。

Javaダイスキっ子のRuby勉強4日目。初めてのRubyで勉強しています。
今日は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 件のコメント:

コメントを投稿