Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Глючит Input Text (http://www.flasher.ru/forum/showthread.php?t=77102)

GeeZeR 18.03.2006 01:46

Глючит Input Text
 
Вложений: 1
В общем такая проблема: создаю простой мувик с текстовым полем типа Input Text, затем поле Dynamic Text и кнопка.
В окошке Var: поля Input Text ввожу переменную "inp", тоже самое и для Dynamic Text - переменная "res".

В кнопке пишу код:
Код:

on (press) {
        res = 10+inp;
}

Создаю swf, в поле для ввода пишу 5. Казалось бы результат должен быть 15, а нифига! Результат такой: 105 ! Как буд-то бы это строчные данные, то есть "10"+inp (код
Код:

on (press) {
        res = "10"+inp;
}

выдал тот же результат: 105).

Ладно, меняю res = 10+inp; на res = 10-inp;, создаю swf, снова ввожу 5 и получаю ожидаемую разницу: 5 !
То есть при суммировании либо 10 воспринимается как строковый тип данных, то ли содержимое переменной inp, а при вычитании всё нормально. В общем прилагаю файл, сам не знаю чё и думать :confused:
а пока извращаюсь таким кодом:
Код:

on (press) {
        res = 10-(-inp);
}


Den0k 18.03.2006 01:58

GeeZeR, ну запутался ты, зачем это на форум писать, ты точно уверен, что подумав и почитав справку, та САМ не решишь проблему, а?

У людей же психика неустойчивой может оказаться, особенно после res = 10-(-inp); :mad:
Советую задуматься:rolleyes:

GeeZeR 18.03.2006 02:29

Да это ж явный глюк, причём тут справка! Хотя... ща почитаю
ЗЫ: Мог бы и ответить если знаешь в чём тут трабл

GeeZeR 18.03.2006 02:52

Нды, действительно - чтение справки помогает :eek:
Боже, да кто же там у них в Макромедии додумался до такого идиотизма:
res = 10-inp; - работает как надо, а для суммы нужно оказывается писать:
res = 10+Number(inp);
лыжники блин...

Den0k 18.03.2006 03:23

у тебя и inp и res это String
а при работе с строками можно использовать оператор + с *не* строками, 10 например, это число. В этом случае результат будет String, строка сложенная из этих двух значений, как ты понимаешь отнимать так не получится, отрицательных строк не бывает, ясно?

Я б сказал что надо делать с такими как ты, но боюсь ты так и не поймёшь почему тебя как минимум к компам пускать нельзя.

GeeZeR 18.03.2006 15:34

Цитата:

Сообщение от Den0k
у тебя и inp и res это String
а при работе с строками можно использовать оператор + с *не* строками, 10 например, это число. В этом случае результат будет String, строка сложенная из этих двух значений, как ты понимаешь отнимать так не получится, отрицательных строк не бывает, ясно?

Ясно, я в курсе что такое конкатенация и автоматическое приведение к типу, когда в выражении вместе с числовыми встречаются и строковые данные. Но ответь мне как же тогда относиться к словам, что мол Флеш автоматически распознаёт тот или иной тип данных? Почему это по умолчанию всё, что ни вводится в поле ввода объявляется строкой? По какой такой причине? У поля ввода есть нормальная переменная, такая же как и все остальные, и тип данных в ней ТОЖЕ обязан распознаваться автоматически. Я не понимаю логики разработчиков, если запись типа число + переменная содержащая число по их мнению является желанием флешера соединить два текстовых поля (!!?)! Тебе не кажется это странным? В конце концов зачем тогда существует такая вещь как "приведение к типу"? Мне кажется переменная поля ввода должна себя вести так, как и все остальные переменные во Флеше, а уж метод toString() я и сам смогу применить когда нужно.

Цитата:

Сообщение от Den0k
Я б сказал что надо делать с такими как ты, но боюсь ты так и не поймёшь почему тебя как минимум к компам пускать нельзя.

ЛОЛ, Я б сказал, что тебе нужно делать, но не буду опускаться до хамства как ты. Во всяком случае судя по твоей наглости и времени создания твоего поста - скажу, что тебе нужно спать по ночам, чтобы выспаться и иметь хорошее настроение, а не бродить по форумам, к которым, к слову, тебя подпускать вообще нет смысла.

Madasan 18.03.2006 16:35

Цитата:

Почему это по умолчанию всё, что ни вводится в поле ввода объявляется строкой? По какой такой причине? У поля ввода есть нормальная переменная, такая же как и все остальные, и тип данных в ней ТОЖЕ обязан распознаваться автоматически. Я не понимаю логики разработчиков, если запись типа число + переменная содержащая число по их мнению является желанием флешера соединить два текстовых поля (!!?)!
Для преобразования типов есть определенные правила, и их необходимо знать!!! А не возмущаться. При попытке сложения (+) строки и числа, число автоматически преобразуется в строку, и не важно какой переменной ты присваиваешь результат. Если тебе надо сложить числа, то есть оператор Number(). Вот если мне надо текстовому полю присвоить сумму двух строк, что я должен ругать разработчиков за то, что они меня заставляют лишний раз писать toString()?

GeeZeR 18.03.2006 17:25

Да никто никого не ругает, просто я пытаюсь порассуждать на эту тему. Мне лично кажется странным, что при сложении числовой константы и переменной содержащей число, в итоге получается строка! И не важно, что эта переменная была взята из поля типа Input Text. Флеш автоматически распознаёт типы данных - то же самое должен делать и в этом случае. То есть при вводе букв или букв с цифрами - Input Text должен определять эти данные как строку, а при вводе цифр - как числовые данные, что и происходит во всяком другом случае, кроме случая с полем типа Input Text. Это по моему логично, а уж если вам непременно захотелось из цифр сделать строку - ради Бога - делайте с помощью последующей обработки кода, а именно методом toString().
Понятно, что раз заведено так как есть - приходится следовать правилам, но мне они кажутся немного не логичными, о чём я, собственно, и высказываюсь.

Madasan 18.03.2006 17:42

В твоем случае переменная 'inp' содержит не число, а строку. Cвойство TextField.text ссылается на ту же самую переменную, а это свойство имеет тип String. Да и не удивительно, ведь то что ты вводишь в текстовое поле, ничто иное как строка, набор кода символов.

GeeZeR 18.03.2006 18:04

Но ведь когда присваиваются числовые данные какой-нибудь переменной на временнОй шкале - это ведь тоже по сути набор кода символов. И в том-то особенность Флеша и состоит, что он автоматически распознаёт к какому типу данных этот набор символов отнести. В случае с полем ввода данные передаются в такую же самую переменную - не лучше и не хуже других, поэтому и распознавание типа данных должно выполняться "на лету". Мы же в выражениях используем не само поле, где вся введённая информация - это простой набор символов, а мы используем ПЕРЕМЕННУЮ, которой был отдан этот набор, и которая обязана преобразовать этот набор в правильный тип данных - как и везде во Флеше, как и в примере типа:
а=5;
Но этого преобразования не происходит, и вместо Флеша я сам должен указывать, что это числовые данные - несостыковка короче. Поэтому странно, что переменные поля ввода обрабатываются Флешем иначе чем все остальные.


Часовой пояс GMT +4, время: 11:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.