Programming languages 当(表达式){do stuff}

Programming languages 当(表达式){do stuff},programming-languages,Programming Languages,有人知道您可以使用哪种编程语言吗 when( expression ){ do stuff } 它应该将表达式和代码块注册到某个数组中,然后由后台线程每隔Q mili-/micro-/nanoseconds解析一次,对于每个计算结果为true的表达式,执行其各自的代码块 正如您可能认为的,我已经有了一个实现。我这样问是因为我认为在一些编程语言中支持它会很好 对于那些可能会问这样一条指令有什么用的人,想象一下,您在程序中创建了一些变量/对象,并且希望每当变量/对象具有某个值/状态时都执行一个过程

有人知道您可以使用哪种编程语言吗

when( expression ){ do stuff }
它应该将表达式和代码块注册到某个数组中,然后由后台线程每隔Q mili-/micro-/nanoseconds解析一次,对于每个计算结果为true的表达式,执行其各自的代码块

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

对于那些可能会问这样一条指令有什么用的人,想象一下,您在程序中创建了一些变量/对象,并且希望每当变量/对象具有某个值/状态时都执行一个过程。优点是不必将代码绑定到变量/对象,而且在声明
when(){}
时,它们甚至不必存在。
这可能是某种触发器,SR语言的结构与您要查找的结构非常相似。 语法就在这里

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

您可以在这里找到信息(和实现):

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

看起来有点不同:

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

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

Haskell的库具有类似的功能:

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

a听起来很有趣,但不是我听说的用一种语言实现的。最近的事情可能是一个事件?但即便如此,这也取决于应用程序,而不是语言实现。它还将依赖于最初的作者,而不是最终的代码作者。它看起来像Android中的广播接收器(但具有不同的语法糖)。如果这些在全球范围内实现,这将违反封装原则,我想你是在暗示。1987年推出的Turbo Basic(可能还有那个时代的其他基本实现)在event GOSUB label
上有一些形式为
的事件处理程序,您通常会在文件的顶部声明这些处理程序,并且每当事件发生时,它们都会调用您标记的子例程。对于串行端口事件,COM(n)上有
键(n)
用于热键,
在笔上
用于光笔(无论是什么)事件处理,
在播放时
用于让您知道音符缓冲区何时为空,
在STRIG上
用于操纵杆,
在计时器上(秒)
查找您需要的任何其他信息。它会在每个声明之间检查这些信息。感谢各位的回答。我必须说,我没想到会有这么多(这么清楚)的答案。
do
    a <- readTVar x
    b <- readTVar y
    check (a < b)
    writeTVar z (b - a)