为什么在应用参数装饰器时参数的顺序颠倒了?

Why is the order of the parameters reversed when applying parameter decorators?

提问人:Parzh from Ukraine 提问时间:11/10/2023 最后编辑:Parzh from Ukraine 更新时间:11/10/2023 访问量:25

问:

A.S.:这个问题与装饰器组合无关“装饰器评估”段落解决了问题,但没有回答它。

我有以下代码:

const decorate = (log: string): ParameterDecorator => () => {
    console.log(log)
}

class Thing {
    constructor(
        @decorate('Outer first')
        @decorate('Inner first')
        c0: string,

        @decorate('Outer second')
        @decorate('Inner second')
        c1: string,
    ) {
        console.log(c0)
        console.log(c1)
    }
}

new Thing('Hello!', 'World!')

尝试一下(扩展)。

在上面的代码片段中,所有参数都经过修饰。日志的顺序为:

Inner second
Outer second

Inner first
Outer first

Hello!
World!

我能理解为什么“内在......”排在“外在......”之前。但为什么会出现在之前呢?换句话说,为什么第二个构造函数参数的日志在第一个构造函数参数的日志之前?"… second""… first"

TypeScript 参数 装饰器

评论

0赞 katniss 11/10/2023
假设这是 5 版 TS 之前的版本,这就是它被编译为的方式 - 一个“反向”循环。
0赞 Parzh from Ukraine 11/11/2023
@katniss我怀疑维护者只是觉得使用反向循环,但我认为他们明白执行顺序对命令式语言的结果有很大的影响。你认为是这样吗?
0赞 katniss 11/12/2023
查看编译后的输出。从字面上看就是这样。我不知道为什么,但结果是一个反向循环。
0赞 Parzh from Ukraine 11/12/2023
哦,我自己能弄清楚那部分,谢谢。但这不是我要问的。我问的是为什么循环首先被颠倒了。换句话说,颠倒外序/内序的基本原理是函数组合:(f*g)(x) -> f(g(x)),所以 g(...) 是第一位的,然后是 f(...)。我问的是同样的问题,但关于不同的现象。

答: 暂无答案