Saturday, July 15, 2006

Block Scope

ลองดูตัวอย่างนี้
def bar()
"outer bar"
end

class Foo
def bar()
"my bar"
end

def test(&block)
block.call
end

def test2()
yield
end

def test3(&block)
instance_eval(&block)
end
end

f = Foo.new
f.test { bar }
f.test2 { bar }
f.test3 { bar }


คำถามก็คือ

f.test { bar }
f.test2 { bar }
f.test3 { bar }

ได้ผลลัพท์เป็นอะไร

เฉลย

f.test { bar } # => "outer bar"
f.test2 { bar } # => "outer bar"
f.test3 { bar } # => "my bar"

Related link from Roti

No comments: