【发布时间】:2012-01-16 02:40:16
【问题描述】:
有时我必须实现自定义拖放等功能。代码可能是这样的:
bool mouse_down = false;
Vec2 mouse_pos;
void on_mouse_down() {
mouse_down = true;
mouse_pos = cursor_pos();
}
void on_mouse_move() {
if(mouse_down) {
Vec2f c = cursor_pos();
Vec2f d = c - mouse_pos;
// dragging. make objects tracing the cursor.
// ...
}
}
void on_mouse_up() {
mouse_down = false;
// dropped
// ...
}
我知道这很好用,但我根本不喜欢这样的冗余变量和分离程序。在 IP(命令式编程)中可能是不可避免的;我的问题是,有没有更好的方法来处理 FP(函数式编程)中的这种事情?无论是何种编程语言、Lisp、Scheme、F#、Ruby 等,还是在 IP 中执行此操作的更好方法,任何想法和建议都值得赞赏?
【问题讨论】:
-
上面的代码只是一个最简单的示例。如果我在整个系统中添加更多的功能和限制,变量帐户会爆炸,比如左、右、中间、滚轮、双击、光标在不同对象上的不同操作......
标签: functional-programming imperative-programming