纯洁性#

Slint的属性评估是惰性和“反应”的。当读取属性值时,将计算属性绑定。 属性之间的依赖关系在属性计算期间自动发现。属性存储计算的结果。 当属性更改时,所有依赖属性都会收到通知,以便在下一次读取其值时,将重新计算其绑定。

对于任何响应式系统,计算属性都不应该改变任何可观察状态,除了属性本身。 如果是这样,那么表达式是“纯粹的”,否则就是有副作用的。 副作用是有问题的,因为它们何时发生并不总是清楚:惰性评估可能会改变它们的顺序或影响它们是否发生。 此外,由于副作用导致的绑定计算期间属性的更改可能会导致意外的行为。

因此,Slint中的绑定必须是纯粹的。Slint编译器强制执行纯上下文中的代码不含副作用。 纯上下文包括绑定表达式、纯函数的主体和纯回调处理程序的主体。 在这样的上下文中,不允许更改属性,或者调用非纯回调或函数。

使用 pure 关键字注释回调和公共函数,使它们可以从属性绑定和其他纯回调和函数中访问。

私有函数的纯洁性会自动推断。您可以显式地声明私有函数为“纯”的,以使编译器强制执行它们的纯洁性。

export component Example {
    pure callback foo() -> int;
    public pure function bar(x: int) -> int
    { return x + foo(); }
}