Почему tcl считает пустую строку двойной? - PullRequest
0 голосов
/ 11 февраля 2019

Довольно запутался по этому поводу:

$ tclsh
% string is double {}
1

Почему tcl считает пустую строку допустимым значением double?

1 Ответ

0 голосов
/ 11 февраля 2019

Резюме: Это немного неправильный дизайн, и это было место, где первоначальный вариант использования был неправильным, но мы не можем изменить его в 8. * (Я не уверен насчетTcl 9.0; мы все еще хотим избежать безвозмездных изменений там.)


Команда string is изначально была разработана для поддержки параметров проверки виджета Tk entry.Они позволяют виджету реагировать на ввод текста (или изменение фокуса), проверяя, было ли изменение в виджете в допустимом состоянии, например, удержание целого числа.Если вы хотите этого, вы просто сделаете это:

entry $w -validate key -vcmd {string is integer %P} -invcmd {bell}

Затем, если вы нажали буквенную клавишу, скажем A , с курсором в середине целого числа,Редактирование будет отклонено, и система выдаст предупреждающий шум.Действительно просто.

Есть только одна небольшая проблема.Если вы выбрали весь текст в записи и нажали цифру, редактирование также будет отклонено (если string is было строго по умолчанию).Проблема заключается в том, что в редактировании имеется промежуточное переходное состояние, в котором старый текст удаляется, но перед вставкой нового текста: проверка происходит дважды в такой ситуации, один раз для delete и один раз дляinsert.(Это должно быть так из-за того, как вещи связаны друг с другом под капотом.) Это ужасный пользовательский опыт, поэтому string is был сделан по умолчанию слабым, так что этовариант использования будет работать.

Это не решение, с которым я согласился - это должно было быть наоборот, если вам нужно было бы запросить слабость в тесте, если бы вы этого хотели, что привело бы к очень небольшим накладным расходам здесьпозволяя другим применениям быть более разумными - но в тот момент я был просто обычным пользователем.Я предпочитаю использовать многоэтапную проверку в моих формах, например, использование проверки уровня нажатия клавиш в качестве мягкой проверки, которая допускает неправильный ввод, когда пользователь находится на полпути через использование формы, и просто указывает, что он знает, что проблемы все равно существуют,с помощью таких методов, как настройка цветов фона и отключение кнопок отправки.(Но это не по теме для вашего вопроса ...)

Дизайн команды библиотеки сложен.Требуется тщательное рассмотрение вариантов использования, чтобы получить право.Иногда мы терпим неудачу.


Проблема возникла в коде, который был внешним по отношению к Tcl и Tk примерно во время Tcl 8.1.0. Большинство патча, представившего это, было очень хорошим (оно также давало нам такие команды, как string equal и string map), но это был аспект, который мог бы быть связан с немного большим приготовлением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...