Распечатка текста всех элементов 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 для каждого поля печатается только последнее поле. Где проблема и как ее можно исправить? Спасибо за вашу помощь.


person rnso    schedule 18.09.2017    source источник


Ответы (1)


В вашей спецификации field "" повторно использует одну и ту же строку для каждого из полей. Изменение одного поля изменяет текст для каждого (вероятно, из соображений эффективности это не отражается в графическом интерфейсе). Вы можете изменить строку на field (copy ""), чтобы предоставить уникальную строку.

person rgchris    schedule 18.09.2017
comment
Это действительно уникальная проблема в этом языке! Почему это там? - person rnso; 18.09.2017
comment
@rnso Автор Rebol написал об этом здесь: Является ли Rebol чистым функциональным языком? и обсуждается здесь: Является ли Rebol функциональным языком программирования?. - person rgchris; 18.09.2017
comment
Ветвь Ren-C серии замков Rebol 3, которые созданы буквально в исходном коде, чтобы вы могли получать ошибка в приведенном выше случае. - person rgchris; 18.09.2017
comment
@rnso Многие жаловались на это. Вокруг витало множество идей, но природа дизайна Rebol/Red затрудняет их искоренение. Имейте в виду, что это не просто STRING! с таким поведением, это глубоко вложенные исходные блоки. Были рассмотрены такие стратегии, как копирование при записи, но они приводят к потере контроля и создают свои собственные проблемы. Мое собственное убеждение развилось в том, что придерживаться явного копирования, но с блокировкой источника по умолчанию, является наиболее разумным ответом. - person HostileFork says dont trust SE; 18.09.2017
comment
@HostileFork: Согласен. Я удалил свой комментарий. - person rnso; 20.09.2017