Re: [問題] 一個基礎程式語言問題
今天跟別人討論一下, 既然板上沒人回答,
我就自問自答, 也許有人有興趣可以討論 @@
有可能是這樣的情況...
因為 Dynamic scoping 會去抓最後一個 declare 的變數去作定義.
所以在 foo() 下執行 bar() 會形成把 foo() 裡的 M 拉進 bar() 的 scope 下,
並定義為 50 的情況, 導致在 print 的時候 foo() 下面看不到 local 的 M,
於是從 global 裡找了 M 來印出 M=30
※ 引述《arcred (堅持阿伏哥聯盟)》之銘言:
: 有個題目看了半天實在想不出答案為什麼是這樣...
: 想請板上大大幫忙解答
: int N = 20
: int M = 30
: procedure foo()
: int M = N
: int N = 40
: bar()
: print M,N
: procedure bar()
: M = 50
: 問在 dynamic scoping + define-anywhere + whole-block-scope
: 的情況下, 執行了 foo() 之後會印出什麼東西, 或是哪裡會產生錯誤.
: 答案是 30, 40 (M=30, N=40)
: 實在想不透為什麼啊...如果是印foo圈內的M
: 應該被指定成 M =N =20了 (還是會變成40? 因為是define-anywhere)
: 就算不是, 執行過 bar() 之後, 全域的 M應該也變成 50了才對呀...
: 那30到底是怎麼印出來的呢?
: 付上其他題答案參考
: static scoping+declare-before-use+declartion-to-end-of-block-scope: M=20,N=40
: static scoping+declare-before-use+whole-block-scope: illegal at "int M=N"
: static scoping+declare-anywhere+whole-block-scope: M=40, N=40
: 謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 68.98.169.112
→
03/14 22:39, , 1F
03/14 22:39, 1F
→
03/14 22:40, , 2F
03/14 22:40, 2F
→
03/14 22:41, , 3F
03/14 22:41, 3F
→
03/14 22:41, , 4F
03/14 22:41, 4F
→
03/14 22:56, , 5F
03/14 22:56, 5F
→
03/14 23:13, , 6F
03/14 23:13, 6F
→
03/14 23:13, , 7F
03/14 23:13, 7F
推
03/16 07:40, , 8F
03/16 07:40, 8F
推
03/16 07:41, , 9F
03/16 07:41, 9F
推
03/16 07:42, , 10F
03/16 07:42, 10F
推
03/16 07:42, , 11F
03/16 07:42, 11F
推
03/16 07:47, , 12F
03/16 07:47, 12F
推
03/16 07:48, , 13F
03/16 07:48, 13F
推
03/16 07:48, , 14F
03/16 07:48, 14F
推
03/16 07:49, , 15F
03/16 07:49, 15F
→
03/16 10:51, , 16F
03/16 10:51, 16F
→
03/16 10:52, , 17F
03/16 10:52, 17F
→
03/16 10:53, , 18F
03/16 10:53, 18F
推
03/16 11:09, , 19F
03/16 11:09, 19F
推
03/16 11:10, , 20F
03/16 11:10, 20F
推
03/16 11:10, , 21F
03/16 11:10, 21F
推
03/17 13:32, , 22F
03/17 13:32, 22F
討論串 (同標題文章)