2017-09-23 35 views
0

我想從一個循環改變了一系列的變量,但下面的代碼是不工作:爲什麼變量從一個循環,紅色語言不改變

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) 

運行此代碼後,我期望的的a值,bc改變,但他們不是:

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

問題出在哪裏?

回答

3
>> 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可以讓你做到這一點。

+0

是的,它的工作原理。我認爲應該強調的不僅僅是':'任務。 – rnso

+1

你在'set varnames:[a b c] [10 20 30]'中需要冒號嗎? – rnso

+0

@rnso no; 'set varnames [a b c] [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 
+2

問題和答案非常類似於https://stackoverflow.com/questions/46234891/parallel-list-assignment-in-red-language/46235435#46235435 – sqlab

+0

'set varnames:[abc] 0' –

+0

當然,但** set-word:**已經由Graham在上面顯示 – sqlab

相關問題