1

次のコードを使用して、リストから値を読み取り、別のリストにも配置されるフィールド要素に入れようとしています:

Red [needs: view]

view [
    text "N1:"
    ff: field ""
    text "N2:"
    gg: field ""

    do [fldlist: [ff gg] 
        vv: 5  ww: 10
        varlist: [vv ww]   ]

    button "Click" [
        repeat i (length? varlist) 
            [to-set-path to-word fldlist/i/text:  varlist/:i]  ] ]

しかし、それは機能していません。エラーは次のとおりです。

*** Script Error: path fldlist/i/text: is not valid for none! type
*** Where: set-path
*** Stack: view do-events do-actor do-safe to-set-path to-word 

私も試し:i (i)てみ(:i)ましたiが、機能していません。問題はどこにあり、どのように解決できますか? ご協力いただきありがとうございます。

4

2 に答える 2

2

使用する

 button "Click" [
    repeat i (length? varlist)   [
        tmp: get fldlist/:i
        tmp/text:  form get varlist/:i
    ]  
]

RedRebolの概念に関するドキュメントを読み始めるか、コンソールでコードをデバッグする必要があると思います 。

アップデート

この点に関して、レボルの経験から私が期待していたように、レッドは振る舞わないことを認めざるを得ません。しかし、一時的な言葉なしで別のトリッキーな解決策を得ました。

button "Click" [
    repeat i (length? varlist) [
        set first find words-of get fldlist/:i  'text form get varlist/:i
    ]  
] 
于 2017-09-20T13:38:19.620 に答える
1

この回答では、マップを使用して、適用しようとしている値を結合し、値の名前を循環させ、それらを対応する値を持つフィールド名と比較して、extraその値に設定します。

values: #(foo: 5 bar: 10)
fields: #()

ui: layout [
    text "N1:"
    field 100 extra 'foo
    text "N2:"
    field 100 extra 'bar

    button "Click" [
        foreach word intersect words-of values words-of fields [
            fields/:word/text: form values/:word
        ]
    ]
]

foreach kid ui/pane [
    if kid/extra [
        put fields kid/extra kid
    ]
]

view ui

ただし、この回答の2番目の例はより良いアプローチであることをお勧めします。

于 2017-09-22T02:57:00.007 に答える