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概念的文档和/或只是在控制台中调试代码。

更新

我必须承认,在这方面,Red 的行为与我对 Rebol 经验的预期不同。但我得到了另一个棘手的解决方案,没有临时的话。

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

但是,我建议此答案中的第二个示例是更好的方法。

于 2017-09-22T02:57:00.007 回答