def x()
puts 'outer'
end
def y()
x()
end
def z()
def x
puts 'inner'
end
y()
end
คำถามก็คือ ถ้าเราเรียกใช้งาน method
z
เราจะเห็น output ที่ stdio เป็นอะไร ระหว่าง "inner" กับ "outer"
ที่นี้ลองดู javascript บ้าง
function x() {
alert('outer')
}
function y() {
x()
}
function z() {
function x() {
alert('inner')
}
y()
}
ทายสิว่า alert box ที่ได้ จะมีข้อความว่า "inner" หรือ "outer"
ถ้าเป็น scheme หล่ะ
(define (x)
(print "outer"))
(define (y)
(x))
(define (z)
(define (x) print "inner")
(y))
javascript กับ scheme จะได้ message ออกมาเป็น "outer"
ส่วน ruby จะได้คำตอบเป็น "inner"
Static Scope
In a language with static scope, each identifier gets its value from the scope
of its definition, not its use.
Dynamic Scope
In a language with dynamic scope, each identifier gets its value from the
scope of its use, not its definition.
ruby -> dynamic scope
javascript, scheme -> static scope
UPDATE
code ruby เขียนผิด แก้ให้ถูกแล้ว
มันผิดตอนเอาไปทำสวย (syntax highligh)
3 comments:
โค้ดรูบี้ x() อันสุดท้ายก่อนจบโปรแกรม ตั้งใจจะให้เป็น y() ป่าวครับ ?
อยากจะลากคุณ Pok ไปสอน software eng + programming lang :P
(อย่างผมนี่พอจะเป็นอาจารย์กะเค้าได้มั่งมะ ?)
เอาแค่สอนพิเศษก็พอ : )
ขี้เกียจเรียนโท
(เข้าใจว่า ใครจะเป็นอาจารย์ต้องจบโท ขึ้นไป)
ไม่เห็นเกี่ยวเลยอ่ะ - -
ถ้ารู้เรื่องไหนดี ก็สอนได้สิ :P
(ผมจบโทแล้วยังไม่เห็นจะทำไรอย่างคุณ Pok ได้เลย)
Post a Comment