我目前正在阅读“基于内容的发布/订阅”设计模式,并且在其中一个实现中,它建议使用字符串形式的表达式订阅事件,即。 eventMiddleware.on("foo===bar && bool",callback)
。
但是我不太确定如何处理字符串表达式中间件方面。
我一直在阅读eval是如何“邪恶”的,我不应该使用它,但在这种情况下它是否合适?有更好的方法吗?或者我是否应该完全避免使用表达式注册事件?
答案 0 :(得分:0)
如果"foo===bar && bool"
生成服务器端,只需将其替换为function (x) { return x === bar && whatever-you-need; }
。按照您的方式编写代码,以便通过调用它来评估函数。如果你能做到这一点,你根本不需要eval。
谓词是后卫。假设你这样定义:
function on(guard, callback)
{
}
然后,在您的模式中,消息调度程序应该执行此操作:
if (tyepof(guard) === "FUNCTION" && guard(arg))
{
callback(arg);
}
我希望这是可以理解的。