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灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP