groovy 中闭包的序列化

标签 serialization groovy closures

我正在用 Groovy 开发一个游戏,我正在考虑广泛使用闭包来使架构更简洁。
例如,为了实现状态效果(例如中毒),玩家对象将有一个闭包列表来执行每个游戏回合。保存游戏时必须将这些序列化。

在需要序列化的对象中存储闭包通常是个好主意吗?或者我应该选择更传统的架构(例如存储 StatusEffect 对象列表)?

最佳答案

有一个关闭列表来执行每个游戏回合听起来是一个非常好的主意:-)

序列化闭包是完全可能的。从 Groovy 1.8.5 开始,这两种方法变得更容易 dehydrate rehydrate 被添加到闭包中(这样 ownerthisObjectdelegate 可以在序列化之前被剥离)

但是我在使用 native java 序列化来保存数据时遇到了问题。对于在系统之间发送短期数据,它可能很棒(但即使如此,我也会查看 protocol buffersthrift )

考虑一下如果您需要更新游戏会发生什么?如果poisoned有bug影响,那么每个在他们的保存文件中保存有错误的中毒闭包的用户都会保留该错误,直到它消失。在多人游戏中,人们也有可能操纵他们的游戏存档文件来赋予自己意想不到的或不需要的权力(因为权力本身的功能将存储在文件中)。我可以看到操纵毒药效果因此增加 HP 而不是去除它们可能是有益的 ;-)

简而言之,我想我想说的是我会写出一个字符表,其中包含影响用户、库存、分数等的 ID,然后在读入文件时检查并应用闭包。

关于groovy 中闭包的序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9649073/

相关文章:

ide - Grails 1.1.X 开发的最佳 IDE

c++ - C++0x lambda 和 operator()、闭包和仿函数之间的区别

ios - 如何从 Swift 中的闭包返回值?

c# - C# 中的 "There was an error reflecting type"

serialization - AppFabric 缓存 - 我可以指定用于所有对象的序列化样式吗?

java - 序列化对象有什么区别,因为它可以持久化?

java - 如何使通过网络传递的 Java 序列化对象通知客户端 GUI 发生变化

groovy - 我没有安装groovy,但是我的groovy代码仍然有效-为什么?

c# - Resharper 关于关闭的警告是否正确?

jenkins - Jenkins Pipeline 中的 StreamingTemplateEngine 与普通 Groovy 中的 StreamingTemplateEngine