Programming 板


LINE

今天跟別人討論一下, 既然板上沒人回答, 我就自問自答, 也許有人有興趣可以討論 @@ 有可能是這樣的情況... 因為 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
1F:→ yauhh:這個解釋合理. 書上有例子說foo是外層M的218.160.112.127 03/14 22:39
2F:→ yauhh:scope,按照同樣模式,bar就是foo內M的scope218.160.112.127 03/14 22:40
3F:→ yauhh:該去看一點C#和Python來核對何謂whole-block218.160.112.127 03/14 22:41
4F:→ yauhh:scope了.218.160.112.127 03/14 22:41
5F:→ arcred:多謝你的回應~請問你看的是哪本呢?能參考嗎 208.29.54.91 03/14 22:56
6F:→ yauhh:我google查到跟你看的一樣的書,就看看了.218.160.112.127 03/14 23:13
7F:→ yauhh:目前google以上關鍵詞查到的來源還真少.218.160.112.127 03/14 23:13
8F:推 march20:等一下, dynamic scoping 會把 calling 128.54.3.243 03/16 07:40
9F:推 march20:stack caller 層中最近的那個 "偷走" 導致 128.54.3.243 03/16 07:41
10F:推 march20:該層的該變數變為不可見. dynamic scoping 128.54.3.243 03/16 07:42
11F:推 march20:有 "偷走" 這種狀況喔 @@? 128.54.3.243 03/16 07:42
12F:推 march20:ok, 我看懂了. 是說 global 的 M=30 因為 128.54.3.243 03/16 07:47
13F:推 march20:是 whole-block-scope, 所以 bar 的 M 128.54.3.243 03/16 07:48
14F:推 march20:不算是未定義, 這時這個廣域 M 算是 stack 128.54.3.243 03/16 07:48
15F:推 march20:中最近的 M. 好壞的題目 @@ 128.54.3.243 03/16 07:49
16F:→ arcred:我不確定答案是不是這樣啦, 只是我的猜想 68.98.169.112 03/16 10:51
17F:→ arcred:教授給了錯的答案也是有可能的 @@ 68.98.169.112 03/16 10:52
18F:→ arcred:只是我寫信問他一直沒回, 在放春假中= = 68.98.169.112 03/16 10:53
19F:推 march20:看起來 whole-block + dynamic-scoping 76.88.39.46 03/16 11:09
20F:推 march20: = 先依 lexicon-scoping 做 binding 76.88.39.46 03/16 11:10
21F:推 march20:找不到再使用 dynamic-scoping 76.88.39.46 03/16 11:10
22F:推 march20:(錯字, lexic"al" scoping 才對 >///<)137.110.161.177 03/17 13:32







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP