为什么变量不会从 Red 语言的循环中改变

Why variables not altering from a loop in Red language

我想改变循环中的一系列变量,但以下代码不起作用:

a: 10
b: 20
c: 30
print reduce [a b c]              ; output is 10 20 30 as expected

varnames: [a b c]                 ; make a series of variables
foreach i varnames [              ; loop to convert each to 0
    i: 0
]

print "After conversion loop: "
print reduce [a b c]              ; values are still 10 20 30 (expected 0 0 0)

在 运行 这段代码之后,我希望 abc 的值被更改,但它们不是:

>> print reduce [a b c]   
10 20 30

问题出在哪里?

>> set varnames: [a b c] [10 20 30]
== [10 20 30]

>> foreach i varnames [set i 0]
== 0

>> reduce varnames
== [0 0 0]

你从循环中给了我一个值,然后给它一个不同的值 0,但你实际上没有改变我引用的词。 set 允许您这样做。

还有一个最短的解决方案

>> set [a b c] 0
== 0
>> reduce [a b c]
== [0 0 0]

还有一个

set set 'varnames [a b c] [0]
>> print probe varnames
[a b c]
0 0 0