FireURQ Bugtracker - FireURQ |
Просмотр подробностей проблемы |
|
Номер | Проект | Категория | Видимость | Создан | Изменен |
0000077 | FireURQ | интерпретатор | общая | 2009-08-29 22:05 | 2009-09-05 10:49 |
|
Инициатор | Best | |
Ответственный | fireton | |
Приоритет | обычный | Серьезность | малая | Воспроизводимость | всегда |
Состояние | закрыт | Решение | решен | |
Платформа | | Операционная система | | Версия ОС | |
Версия продукта | 1.0.6 | |
Целевая версия | 1.0.7 | Решен в версии | 1.0.7 | |
|
Суть | 0000077: Действия с длиной строки |
Подробности | Не уверен баг это или нет, но я получаю вот такой результат:
instr x=k
pln #%x$ #x$ #x+1$
>>k 1 1
Когда хочу получить такой:
>>k 1 2
Прав я или урка? |
Шаги по воспроизведению | |
Дополнительные сведения | |
Метки | Нет прикрепленных меток. |
Связи | |
Вложенные файлы | |
|
история изменений |
Дата изменения | Пользователь | Поле | Изменить |
2009-08-29 22:05 | Best | Новый инцидент | |
2009-08-29 22:05 | Best | Ответственный | => fireton |
2009-08-30 00:02 | Nolite | Комментарий добавлен: 0000092 | |
2009-08-30 00:45 | fireton | Комментарий добавлен: 0000093 | |
2009-08-30 00:45 | fireton | Состояние | новый => назначен |
2009-08-30 00:45 | fireton | Целевая версия | => 1.0.7 |
2009-08-30 01:08 | frodo | Комментарий добавлен: 0000094 | |
2009-08-30 01:09 | frodo | Комментарий изменен: 0000094 | |
2009-08-30 01:10 | frodo | Комментарий изменен: 0000094 | |
2009-08-30 01:18 | frodo | Комментарий изменен: 0000094 | |
2009-08-30 10:31 | Best | Комментарий добавлен: 0000095 | |
2009-08-30 10:55 | frodo | Комментарий добавлен: 0000096 | |
2009-08-31 17:23 | frodo | Комментарий изменен: 0000096 | |
2009-09-04 13:49 | frodo | Комментарий изменен: 0000096 | |
2009-09-04 16:16 | frodo | Комментарий изменен: 0000096 | |
2009-09-04 16:33 | fireton | Комментарий добавлен: 0000104 | |
2009-09-04 16:33 | fireton | Состояние | назначен => отработан |
2009-09-04 16:33 | fireton | Решен в версии | => 1.0.7 |
2009-09-04 16:33 | fireton | Решение | открыт => решен |
2009-09-05 10:49 | fireton | Состояние | отработан => закрыт |
Комментарии |
|
(0000092)
|
Nolite
|
2009-08-30 00:02
|
|
Может, это прояснит ситуацию:
instr x=k
pln #%x$ #x$ # #x$+1$ #%x+1$
>>k 1 2 k |
|
|
|
Наверное, прав ты. Будем посмотреть. |
|
|
(0000094)
|
frodo
|
2009-08-30 01:08
(изменен: 2009-08-30 01:18) |
|
Конструкцию " #x+1$ " фурка и досурка обрабатывают одинаково. Разница только в том, что для фурки х=1 (длина строковой переменной), а для досурки х=0 (для любой строки). "1" в ответе фурки означает, что при сложении строковой и численой переменной строковая не изменилась (как и должно быть), и ее длина по-прежнему равна одному символу
А вот конструкцию #%x+1$ досурка не понимает (в отличие от фурки!), ей нужно что-то вроде
y = x + 1
pln #%y$
только тогда выводится "k". Так что, получается, фурка ведет себя даже лучше(?) досурки.
Права урка!
|
|
|
(0000095)
|
Best
|
2009-08-30 10:31
|
|
>pln #%x$ #x$ # #x$+1$ #%x+1$
про # #x$+1# я знаю, но это выглядит как-то нелепо, к тому же легко написать ##x$+1$, что вызовет ошибку
>при сложении строковой и численой переменной строковая не изменилась (как и должно быть), и ее длина по-прежнему равна одному символу
я ведь не пытаюсь изменить длину, я пытаюсь всего лишь вывести число равное длине плюс адин |
|
|
(0000096)
|
frodo
|
2009-08-30 10:55
(изменен: 2009-09-04 16:16) |
|
UPD: Давай по-порядку. Что происходит, если интерпретатор встречает "#x+1$" ?
1. Берет значение х. Как видно из программы, х = "k".
2. Складывает строку "k" с числовой константой 1. А как представить текстом число? Тут есть два варианта:
3а. Пустой строкой, как любую необъявленную переменную, т.е. имеем выражение "k" + "" = "k". Тогда длина строки "#x+1$" будет равна длине строки "k", т.е. единице.
3б. Соотв. символом, в нашем случае "1". Тогда да, x+1 = "k1", и его длина #x+1$ = len("k1") = 2. Но тогда и #x+2$ = len("k2") = 2; где len() - длина строки.
IMHO, результат программы -- это случай 3а. 3б. -- это бесполезный теоретический вариант.
UPD(2): А "длина строки плюс один" это #x$+1, заключенное в #$, т.е. ##x$+1$.
|
|
|
|
Короче вот что. Решатель видел, что первое значение - строка и включал режим сложения строк. Второе значение он пытался тоже представить строкой. Но строковое представление числа - пустая строка (так в досурке). Поэтому результатом получалось первоначальное значение ("k").
Теперь режим сложения строк включается только в случае, если оба операнда - строки. В противном случае он включает режим сложения чисел. А числовое значение строки - всегда длина строки (в фурке). Поэтому результат будет правильный. |
|