是否有人知道您可以使用哪种编程语言:
when( expression ){ do stuff }
应该在某个数组中注册表达式和代码块,然后通过后台线程每隔Q mili- /微/纳秒对其进行解析,对于每个计算结果为true的表达式,执行它的相应代码块
正如您所想,我已经有了实施。我问,因为我认为在某些编程语言中原生支持它会很好。
对于谁可能会问这样一条指令的用途 - 假设你在程序中创建了一些变量/对象,想要每次/当/当/变量/对象具有某个值/状态时执行一个过程。优点是您不必将代码绑定到变量/对象,并且在声明when(){}
时它们甚至不必存在。
这将是某种触发器
答案 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)
这会将x
和y
的当前值读入a
和b
,并等到a < b
变为true后再继续下一个线。
这样做无需忙碌等待。如果条件a < b
为假,它将中止事务并开始侦听到目前为止已读取的TVar,即x
和y
。当通知其中一个TVar已更新时,它才从顶部重新启动事务以再次尝试。