0

是否可以定义一个函数并将其反序列化到/从 json?例如,如果我在文件中读取:

foo.json:

{
    name: 'foo',
    eventListener: (event){
       //Do stuff with event in here 
    }
}

然后在 dart 代码中将 json 读入地图并分配属性:

myObject.name = fooMap['name'];
myObject.onChange.listen(fooMap['eventListener']);

更新

感谢贾斯汀的澄清,我正在尝试使用数据驱动设计编写一个简单的基于文本的游戏,这样其他用户就可以轻松地为其编写自己的添加和模组。

我希望我的程序能够读取“流派包”json文件,例如:

幻想.json:

{
    name: 'Fantasy',
    description: 'Traditional fantasy concepts, knights, dragons, magic ... etc.',
    classes: [
        {
            name: 'Warrior',
            description: 'A melee fighter that wears heavy armor',
            passiveSkill: {
                name: 'Inner rage',
                description: 'When health drops below 10%, physical damage is increased by 100%.',
                impl: {
                    event: 'hpChange',
                    fn: (event){
                        if(event.hp < (event.hpMax / 10)){
                            event.character.physicalAttack += event.character.physicalAttack;
                        }
                    }
                }
            }                
        },
        // many more classes defined here...
    ]
}

因此,当 dart 文件解析流派 json 文件时,它会将事件侦听器函数连接到字符“hpChange”事件。但是从您的评论看来,我将使用一个字符串来编码我的事件侦听器逻辑,并有一个特殊的事件处理程序创建函数来解析该字符串并生成一系列嵌套函数来实现效果......也许。

4

1 回答 1

2

不,不可能在 Dart 中序列化函数。

也不能直接在 JavaScript 中将函数序列化为 JSON,尽管您可以将其写入字符串,写入该字符串并用于eval()将其读回,但这仅适用于您不关闭任何免费的情况变量(在函数外部声明但在函数内部访问的变量),因为这些变量可能未在您反序列化到的范围内定义。

在非常有限的情况下,您可以做的是序列化函数的名称及其参数,然后使用镜像或查找表在反序列化端手动查找函数。自由变量仍然存在问题,但问题不是未定义它们,而是问题可能是它们没有您期望的值。这实际上取决于您的应用程序。

如果您提供有关您的用例的更多信息,我们可能会提供其他建议。

于 2013-11-12T03:02:47.353 回答