是否可以定义一个函数并将其/ jon /序列化为json?例如,如果我在文件中读到:
foo.json:
{
name: 'foo',
eventListener: (event){
//Do stuff with event in here
}
}
然后在dart代码中将json读入地图并分配属性:
myObject.name = fooMap['name'];
myObject.onChange.listen(fooMap['eventListener']);
感谢Justin的澄清,我正在尝试使用数据驱动设计编写一个简单的基于文本的游戏,因此其他用户可以轻松地为其编写自己的附加内容和模型。
我希望我的程序能够读入“genre pack”json文件,例如:
fantasy.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'事件。但是从你的评论中我觉得我会使用一个字符串来编码我的事件监听器逻辑,并有一个特殊的事件处理程序创建函数来解析该字符串并生成一系列嵌套函数来实现这种效果......也许。 / p>
答案 0 :(得分:2)
不,在Dart中序列化函数是不可能的。
在JavaScript中将函数序列化为JSON也不是直接可行的,尽管您可以将其写入String,写入并使用eval()
将其读回,但这仅适用于你不要关闭任何自由变量(在函数外部声明但在其中访问的变量),因为那些可能没有在你反序列化的范围内定义。
在非常有限的一组案例中,您可以序列化函数的名称及其参数,然后使用镜像或查找表在反序列化端手动查找函数。您仍然遇到自由变量的问题,但问题可能在于它们没有您期望的值。它真的取决于你的应用程序。
如果您提供有关您的用例的更多信息,我们可能会提供其他建议。