2

次のコードを使用して、foreach ループを介してビューに複数の GUI 要素を追加しています。

myRange: function [n][  ; to produce a vector of [1 2 3 4... n]
  vv: make vector! n 
  i: 1
  foreach j vv [
    vv/:i: i
    i: i + 1
    if i > n [break]]
  vv ]

view collect[ 
    foreach i myRange 10 [  
        print append "i in loop: " i
        keep [ t: text ]  keep append "message number: " i
        keep [field "entry"     button "Click" [t/text: "clicked"] return]
            ] ]

すべての GUI 要素が作成されています。しかし、コードappend "message number: " iは i の値が12345678910すべてのテキスト要素にあり、異なるテキスト要素の 1、2、3... 10 ではないことを示しています。

また、print append...ステートメントは次の出力を生成しています。

i in loop: 1
i in loop: 12
i in loop: 123
i in loop: 1234
i in loop: 12345
i in loop: 123456
i in loop: 1234567
i in loop: 12345678
i in loop: 123456789
i in loop: 12345678910

さらに、任意のボタンをクリックすると、最後に追加されたテキスト要素のテキストのみが変更されます。

問題はどこにあり、どのように解決できますか? ご協力いただきありがとうございます。


編集:言語が私のコードを次から変換しているようです:

for i 1 10 1 [  
   print append "i in loop: " i  ]

に:

a_variable: "i in loop"
for i 1 10 1 [  
   print append a_variable i  ]

これは、私と (私が思うに) ほとんどのユーザーが望んでいるものではありません。ほとんどの言語では、文字列 "i in loop" は定数と見なされ、変数に変換されません。ユーザーがそのように指定していないためです。そのような基本的な慣習が変更されなければ、他の言語のユーザーがここに来るのがより簡単になるでしょう。

4

3 に答える 3

4

このようなものが表示される場合は常に、新しいシリーズの作成に失敗し、既存のシリーズを再利用していることを意味します.

それを回避するには、新しいシリーズを作成する必要がありますcopy

例えば。

print append copy "i in loop: " i

Rebol3/ren-c では、ソース コードが不変であり、そのようなコードでエラー メッセージが表示されるため、この問題はなくなりました。

于 2017-09-17T05:59:17.380 に答える