【发布时间】:2015-12-31 04:34:19
【问题描述】:
我有一个(相当哲学的)问题,它指的是cyclejs 组件:Is isolate() referentially transparent?。
查看此后复制的简化代码,我无法区分“杂质”的任何来源。那是因为未简化的代码引入了它,还是因为该函数将返回具有两个不同引用的两个不同对象?
在那种情况下,这两个对象会不会有相同的行为(即在相同的目标上侦听和响应相同的事件,并产生不同的 vTree$ 但封装完全相同的序列?)。如果是这样,那这两个对象不是本质上相同吗,即在程序中的任何地方用另一个替换一个对象应该不会改变任何东西?这意味着isolate 是引用透明的?我哪里做错了?
实际上,如果两个调用都返回了不同的无法替换的对象,那么这些对象有何不同?
function isolate(Component, scope) {
return function IsolatedComponent(sources) {
const {isolateSource, isolateSink} = sources.DOM;
const isolatedDOMSource = isolateSource(sources.DOM, scope);
const sinks = Component({DOM: isolatedDOMSource});
const isolatedDOMSink = isolateSink(sinks.DOM, scope);
return {
DOM: isolatedDOMSink
};
};
}
【问题讨论】:
标签: cyclejs