何时(表达){做东西}

时间:2013-03-15 10:08:06

标签: programming-languages

是否有人知道您可以使用哪种编程语言:

when( expression ){ do stuff }

应该在某个数组中注册表达式和代码块,然后通过后台线程每隔Q mili- /微/纳秒对其进行解析,对于每个计算结果为true的表达式,执行它的相应代码块

正如您所想,我已经有了实施。我问,因为我认为在某些编程语言中原生支持它会很好。

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

3 个答案:

答案 0 :(得分:0)

SR语言的构造与您查找的构造非常相似。 那里的语法是

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

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

答案 1 :(得分:0)

我不知道你所描述的任何语言层次结构,但它原则上与ReactiveX对其可观察物的作用相似。我相信Observable类型也将被合并到未来版本的Javascript中。

看起来有点不同:

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

VS

when(expression) { // do stuff }

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

答案 2 :(得分:0)

Haskell的Software Transactional Memory库具有相似的内容:

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

这会将xy的当前值读入ab,并等到a < b变为true后再继续下一个线。

这样做无需忙碌等待。如果条件a < b为假,它将中止事务并开始侦听到目前为止已读取的TVar,即xy。当通知其中一个TVar已更新时,它才从顶部重新启动事务以再次尝试。