6

有谁知道您可以使用哪种编程语言:

when( expression ){ do stuff }

它应该在某个数组中注册表达式和代码块,然后由后台线程每 Q 毫秒/微秒/纳秒解析一次,并且对于每个计算结果为 true 的表达式,执行它各自的代码块。

正如你可能想的那样,我已经有了一个实现。我问是因为我认为在某些编程语言中本地支持它会很好。

对于谁可能会问这样的指令有什么用 - 假设您在程序中创建了一些变量/对象,并且希望每次/而/每当变量/对象具有特定值/状态时都执行一个过程。优点是您不必将代码绑定到变量/对象,甚至在您声明when(){}. 这将是某种触发器

4

3 回答 3

0

SR 语言的结构与您要查找的语言非常相似。语法是

do guard -> command 
[] guard -> command
[] guard -> command
...
od

您可以在此处找到信息(和实施):http ://www.cs.arizona.edu/sr/

于 2014-09-14T22:59:58.313 回答
0

Haskell的软件事务内存库有类似的东西:

do
    a <- readTVar x
    b <- readTVar y
    check (a < b)
    writeTVar z (b - a)

x这会将and的当前值读取yaandb中,并等到a < b变为 true 后再继续下一行。

它可以在没有忙等待的情况下这样做。如果条件a < b为假,它会中止事务并开始侦听对迄今为止已读取的 TVar 的写入,即xy。当通知其中一个 TVar 已更新时,它才会从顶部重新启动事务以再次尝试。

于 2018-08-09T15:18:59.583 回答
0

我不知道任何语言级别的构造,如您所描述的,但它在原则上听起来与ReactiveX对其可观察对象所做的相似。我相信 Observable 类型也将被合并到 Javascript 的未来版本中。

它看起来有点不同:

observable.doNext(() => { // do stuff })

与:

when(expression) { // do stuff }

在示例中,您给出的表达式将返回类似于 ReactiveX 可观察对象的内容,并且语句的主体可以等同于.doNext(() => do stuff). 事实上,Rx 为如何处理不同的可观察事件提供了许多选项,它可以做一些非常强大的东西,让您可以链接操作。

于 2018-02-21T11:33:48.873 回答