【问题标题】:Why variables not altering from a loop in Red language为什么变量不会从 Red 语言的循环中改变
【发布时间】:2018-03-04 16:30:24
【问题描述】:

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

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

问题出在哪里?

【问题讨论】:

    标签: list variable-assignment rebol red


    【解决方案1】:
    >> set varnames: [a b c] [10 20 30]
    == [10 20 30]
    
    >> foreach i varnames [set i 0]
    == 0
    
    >> reduce varnames
    == [0 0 0]
    

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

    【讨论】:

    • 是的,它有效。我认为 set 应该比 ':' 分配更重要。
    • set varnames: [a b c] [10 20 30] 中需要冒号吗?
    • @rnso 没有; set varnames [a b c] [10 20 30] 很好
    • @Geeky,这行不通。在新的控制台中尝试一下,你会明白为什么不这样做。它至少需要两个操作,首先 set 'varnames [a b c]
    • 即使 varnames 已经定义,它也不起作用,因为 varnames 设置为 [abc] 然后 [10 20 30] 被单独留下
    【解决方案2】:

    另一种,但最短的解决方案

    >> 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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2016-05-27
    • 2021-12-10
    相关资源
    最近更新 更多