- 论坛徽章:
- 2
|
本帖最后由 OwnWaterloo 于 2010-05-09 01:22 编辑
回复 26# zylthinking
你依然没有理解partial application到底是怎么回事。
就说你这个效果
closure1 = papply(f, context1);
closure1(sig); //f(context1, sig);
closure2 = papply(f, context2);
closure2(sig); //f(context2, sig);
closure1(sig); //f(context1, sig);
你觉的只有你的机器码能实现?
struct A{
func_type func_ptr;
void* context;
void closure(int sig){
this->func_ptr(sig, context);
};
}
papply(f, context1){
a = (A*) malloc(A);
a->func = f;
a->context = context1;
return a;
}
A* pa1 = papply(f, context1);
A* pa2 = papply(f, context2);
pa1->closure(sig);
pa2->closure(sig);
zylthinking 发表于 2010-05-08 23:51[img] [/img]
别搞笑了。
pa1->closure(sig); << 这是什么东西?
partial application得到的是一个函数, free function。 而不是什么member function。
你可以closure(sig)来调用吗? this怎么传递?
如果不行, 你怎么将它传递给signal?
你这代码根本没有解决问题: 缺少一个context。
你只是将context放到一个class中, 然后将问题转换为如何传递instance。
脱了裤子放屁而已。
如此初级代码也敢拿出来show?
所以我说你直到现在都没能理解我写的代码究竟是实现了什么机制。
void signal_add(int sig
,void (*handler)(void* context, int sig)
,void* context);
这个东西, 我实现不了, 你也实现不了, 原因在于信号处理函数不排队, 和你机制不机制没有你所谓的"球"关系, 你构建所谓的闭包再完美, 真正的绑定是signal函数, 白亏你阳春白雪, 还是一样和我大街上讨饭的一起争食, 你觉得你高贵, 很高级? 笑死人了, 我就是很低级, 我就是笑死了。
zylthinking 发表于 2010-05-08 23:51[img] [/img]
你以为我会像你一样? 对完全没把握的事也敢乱说?
看好了:
- void
- continuation
- (
- void (*prev)(int sig),
- void (*next)(void* ctx, int sig),
- void* ctx,
- int sig
- )
- {
- prev(sig);
- next(ctx, sig);
- }
- void
- signal_add
- (
- int sig,
- void (*handler)(void*, int),
- void* ctx
- )
- {
- old = signal(sig, 0);
- now = bind(continuation, old, handler, ctx);
- signal(sig, now);
- }
复制代码 本来如果signal的签名设计不存在缺陷的话, 根本无须搞这么多动作。
可是它的确有缺陷, 而且这种不带context的回调签名在legacy设计中多得是。
以C标准库为例: qsort, bsearch, atexit都是。
为什么posix要实现这么多xxx_r函数? 你以为是好玩吗?
你用你的阳春白雪式实现上面的东西看看?
closure会对编程技法产生怎样的影响, 我看你没法体会的。
一辈子用你的全局变量,
一辈子头痛医头脚痛医脚去吧。
你要一定说你的好, 你回帖一定要多多说明是哪里好, 开门语似的给人扣帽子, 还是少些的好。
你牛别人就傻么, 你有多牛啊, 笑死我这个低级的了
zylthinking 发表于 2010-05-08 23:51[img] [/img]
我从一开始就给出一个方案可以解决楼主的问题。
而你居然可以在
完全不理解这方案, 也不自己给出方案的情况下:
先在19楼说出一个传递栈变量的笑话;
然后在22楼继续扯到代码风格;
还可以YY我如何如何, 还可以下断言如何如何。
你脸皮可真是不薄!
我没说我多牛, 我也没说这方案多好多好。
可我至少不会
不懂装懂, 乱扣帽子, 张嘴打哈哈。 |
|