PLT 板


LINE

看板 PLT  RSS
无聊没事, 再来回一篇... ※ 引述《zerodevil (冰心无情)》之铭言: : 其实如果允许nested function的话 : 拿到上一层function的变数也没什麽不好 : : function foo() { : var x = 1; : function bar() {alert(x)} : bar(); : } : 我想应该不用特别解释了 : 这个例子的bar可以看到x然後印出1 : : bar宣告在foo里面, : 所以bar在的时候一定有x可以用 : 想在compile time算出x的address也不是什麽问题 是的, Pascal 就是如此 只是如果是用到好几层外的变数有可能要查好几次 base address 就是了 其实 gcc 也可以... $ cat t.c #include <stdio.h> int main(){ int x = 1; int a(){ int b(){ x = 2; } b(); } a(); printf("%d\n", x); return 0; } $ gcc t.c $ ./a.out 2 : (如果javascript可以compile的话) : : 这样godfat大提到的问题或许可以少一些? : : -- :



※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.112.90.68 : ※ 编辑: zerodevil 来自: 140.112.90.68 (03/06 04:21) : 推 linjack:这应该是比较像 lambda / closure 的概念?不太一样吧._.? 03/06 11:40 : 推 godfat:同意 linjack, 这样是无法无中生上层的 local var 的 03/06 15:11 : → godfat:也就是那有一定的限制在,不能任意操作 local var 03/06 15:12 其实 gcc 的实作和 Pascal 是类似的 (我没细看 gcc -S 的结果, 但是复杂的程度有点像) 而他们有个共通点: 不支援 returning local function $ cat t.c #include <stdio.h> int (*a())(); int c(); int main(){ int (*f)(); int x = 1; f = a(); c(); x = f(); printf("%d\n", x); return 0; } int (*a())(){ volatile int x = 2; int b(){ return x; } return &b; } int c(){ volatile int y = 3; volatile int z = y + 1; volatile int w = z + 1; return w; } $ gcc t.c $ ./a.out 5 如果在 c() 里再加个 volatile int v = w + 1; 甚至会 segmentation fault 但是 javascript, perl 之类的语言都可以做到 这才是 linjack 所说的 closure 大部份的 functional language 也都支援, 而且是 functional programming 时一个重要的工具.. 绕回原题... lisp 从 dynamic scoping 换到 static scoping 时, 因为很多变数忽然「拿不到了」 於是 closure 成了「又拿得到了」的方法 XD -- All this will not be finished in the first 100 days. Nor will it be finished in the first 1,000 days, nor in the life of this Administration, nor even perhaps in our lifetime on this planet. But let us begin. -- John F. Kennedy, Inaugural Address --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.54
1F:推 godfat:gcc 居然有这种 ext @@ 第二段那些看不太懂... 大概是在弄 03/06 22:47
2F:→ godfat:call stack 的东西?所以才需要 volatile, 猜的 03/06 22:47
3F:→ scwg:嗯, 因为不确定会不会被 optimize 掉, 所以加 volatile 03/06 22:55
4F:→ scwg:强制 override memory 03/06 22:55







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

请输入看板名称,例如:Tech_Job站内搜寻

TOP