【问题标题】:Printing out text of all GUI elements in Red language以红色语言打印出所有 GUI 元素的文本
【发布时间】:2017-09-18 17:42:15
【问题描述】:

我正在尝试从以下代码中的所有 GUI 元素中打印出文本:

  sentlist: ["A" "B" "C"]

  main: function [slist] [
      view collect [
          repeat i length? slist [
              keep compose [
                  text (slist/:i)
                  field "" 
                  return ]]
          keep [button "Printall" [
              repeat i (2 * length? slist)[
                  print face/parent/pane/(i)/text  ]]]]]

 (main sentlist) 

它运行正常,没有任何错误,text 元素的文本被正确打印出来,但是对于fields,每个字段只打印最后一个字段的条目。问题出在哪里,如何纠正?感谢您的帮助。

【问题讨论】:

    标签: user-interface rebol red


    【解决方案1】:

    在您的规范中,field "" 对每个字段重复使用相同的字符串。更改一个字段会更改每个字段的文本(可能出于效率原因,这不会反映在 GUI 中)。您可以将该行更改为 field (copy "") 以提供唯一的字符串。

    【讨论】:

    • 这在这种语言中确实是一个独特的问题!为什么会在那里?
    • @rnso Rebol 作者在这里写了这篇文章:Is Rebol a Pure Functional Language? 并在这里讨论:Is Rebol a Functional Programming Language?
    • Rebol 3 的 Ren-C 分支锁定了在源代码中逐字创建的系列,因此在上述情况下您会收到错误。
    • @rnso Many people have complained about this。很多想法已经浮出水面,但 Rebol/Red 设计的本质使其难以切除。请记住,这种行为不仅仅是 STRING!s,它是深度嵌套的源代码块。诸如写时复制之类的策略已经被考虑过,但在引入自己的问题时会导致失控。我自己的信念演变为认为默认情况下坚持显式复制但锁定源代码是最合理的答案。
    • @HostileFork:同意。我已删除我的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    相关资源
    最近更新 更多