【问题标题】:Save a value to a block instead of the word label that represents it将值保存到块而不是表示它的单词标签
【发布时间】:2013-02-14 18:25:12
【问题描述】:

我正在尝试将一些字符串值保存到一个块中,以便我可以将该块保存到一个文本文件中。我正在使用 VID 从表单中获取这些值。

一种方法是简单地将字符串保存到文件中。但我更希望能够以块的形式检索数据。

这是我打算做的:

view layout [
    contact-name: field
    save-button: btn "Save" [
        saved-data-block: copy []
        append saved-data-block [[contact-name: contact-name/text]] ;problem here
        save my-file saved-data-block
    ]
]

对于名称字段中的Rebol User这样的输入,文件中存储的内容应该是[contact-name: "Rebol User"],但内容是[contact-name: contact-name/text]

我了解问题在于,在我将块附加到 saved-data-block 时,该块没有被评估为代码。如何以块状方式将字符串值保存到文本文件中?我应该做其他事情来实现这一目标吗?欢迎任何 cmets/查询。

【问题讨论】:

    标签: string block rebol rebol2


    【解决方案1】:

    如果您不需要专门使用 reduce,compose 可能是一种更好的方式来调出您想要“不理会”的部分。只有括号中的东西会被评估,其他的都不会改变。比如:

    append/only saved-data-block compose [contact-name: (get-face contact-name)]
    

    Compose 通常是表达样板文件的最清晰方式,其中包含您想要评估的小部分。当然,了解reduce也很好。

    【讨论】:

      【解决方案2】:

      还有一个想法:

      append/only saved-data-block repend [contact-name:] get-face contact-name 
      

      这次 contact-name: 没有减少,所以它仍然是一个 set-word!,并附加了来自表单元素的值。

      双附加看起来不太好,但可以节省击键。

      【讨论】:

        【解决方案3】:

        格雷厄姆的回答实际上漏掉了一个勾:-)

        append/only saved-data-block reduce [ to-set-word 'contact-name get-face contact-name ]
        

        没有 ' reduce 会将联系人名称还原为其值,即一个对象!在交给 to-set-word 之前。

        因此,您必须将联系人名称更改为一个字词! '联系人姓名。

        reduce 将其简化为一个单词!,然后将其交给 to-set-word 。

        【讨论】:

          【解决方案4】:

          Reduce 也会重置同样是“contact-name”的字段的名称。

          这样会更好

          append/only saved-data-block reduce [ to-set-word contact-name get-face contact-name ]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-26
            相关资源
            最近更新 更多