gpt4 book ai didi

callback - 回调如何在纯函数式编程中修改对象的状态?

转载 作者:行者123 更新时间:2023-12-04 12:47:50 24 4
gpt4 key购买 nike

问题在于:GUI 按钮有一个回调,可以将其状态从选中状态切换为未选中状态。

在命令式编程语言中,它很容易实现:只需修改 Button 的状态。例如:

void callback(Button btn) {
btn.setChecked(!btn.getChecked());
}

但是在纯函数式编程中,回调不能改变对象的状态。回调唯一能做的就是创建一个具有新状态的新 Button 对象。例如:
Button callback(Button btn) {
return new Button(!btn.checked);
}

由上述回调创建的按钮将不是程序 GUI 的一部分,因为外部函数必须获取回调的结果并将新按钮值重新集成到 GUI。

此外,按钮不应具有具有上述类型签名的回调,因为按钮回调应该是通用的。 IE。回调的类型签名将是:
Object callback(Object object);

我能在纯函数式代码中想到的唯一解决方案是让回调接受并返回全局 GUI,例如:
GUI callback(GUI gui, Button btn) {
...bla bla bla recreate the gui tre ...
}

那么我如何在纯函数代码中做到这一点呢?我的纯功能回调如何改变我的按钮状态?

最佳答案

以纯函数方式设计 GUI 的最优雅的方式可能是 Functional Reactive Programming - 另见 this SO questionHaskellWiki page .

如果你这样做,那么你就不会使用回调本身,而是定义函数来解释“行为”应该如何随着时间和用户输入而演变。单击按钮将是一个“事件”,它会影响相关行为。

如果您想坚持使用更传统的回调模型,那么我认为一定程度的命令式行为是必要的。

但是,您可以通过例如只有一个代表程序整个当前状态的顶级可变值来将可变性保持在最低限度,这可能有点类似于 GUI键入您在上面建议的类型。该值将是一些复杂的代数数据类型,它包含可以更改的所有内容。

您还可以使用抽象来限制对顶级状态的访问,例如通过限制只访问它的特定部分,并且只允许访问特定回调的那些抽象。

关于callback - 回调如何在纯函数式编程中修改对象的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com