Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Чисто для интереса вопрос по текст филд (http://www.flasher.ru/forum/showthread.php?t=213431)

grafillo! 30.09.2016 13:15

Чисто для интереса вопрос по текст филд
 
Написал два приложения в одном данный с текстфилда можно сразу использовать как цифры во втором приходится конвертить, мучался мучался почему так, так и не допёр даже копировал текстфилды из одного в другое всё равное не пашет выдаёт что данные стринг

в первом код работает
Код AS3:

postWind.postLimit.text = 90;
        postWind.postSucc.text = 0;

во втором только так
Код AS3:

minNum =  Number(minTxt.text);
        maxNum = Number(maxTxt.text)-minNum;

Может проблема с разработчиками флеша и он работает на рандоме?)

in4core 30.09.2016 13:53

Ох... как вы что-то там пишите какие то приложения, когда такие вопросы с стольких лет работы.
В первом случае - вы присваиваете тексту число (конвертируете нумбер в стринг) , может ли быть текст таким ^%$&^% или таким 987987897 ? Может. А во втором случае вы пытаетесь из ТЕКСТА вычесть число, или просто сделать число из текста. Вуаля : ?*:*:%?*: - 90 что получится ? То то же.

undefined 30.09.2016 14:27

текстфилд всегда возвращает строку т.к. это ТЕКСТфилд

in4core 30.09.2016 19:59

undefined - не морочьте людям голову - в примере операции присвоения.

caseyryan 01.10.2016 16:30

Цитата:

Может проблема с разработчиками флеша и он работает на рандоме?)
Нет, во флеше этот механизм работает без багов. В данном случае проблема точно в твоем кривом коде.

А почему так: текстфилд - работает только со строкой. Ему нельзя присвоить число в поле text, ровно как и нельзя получить число из него. И в первом и во втором случае нужно приведение типов.
Чтобы присвоить текстфилду число, его нужно сначала сконвертировать в строку.

Код AS3:

someTextField.text = Number(10).toString();
или так
someTextField.text = 10 + ""; // при конкатенации со строкой, число автоматически сделается строкой
или так
someTextField.text = String(10);

и обратный процесс
Код AS3:

var someNumber:Number = parseFloat(someTextField.text); // ну или parsInt() если нужно целое

И не нужно тут рассказывать сказки про то, как там чудесным образом работает присвоение числа полю text.

Наверняка этот postLimit - это сеттер, внутри которого происходит что-то вроде этого:
Код AS3:

public function set postLimit(value:int):void {
  someTextField.text = String(value);
}


in4core 02.10.2016 23:54

Цитата:

И не нужно тут рассказывать сказки про то, как там чудесным образом работает присвоение числа полю text.
Костя не глупи - работает, именно так как я написал, а вот строке число не присвоишь. Возможно ты ошибся.
Только сегодня сам писал код на одну фишку tf.text = x / 100 - прокатывает идеально

caseyryan 03.10.2016 06:54

Цитата:

Сообщение от in4core (Сообщение 1196525)
Костя не глупи - работает, именно так как я написал, а вот строке число не присвоишь. Возможно ты ошибся.
Только сегодня сам писал код на одну фишку tf.text = x / 100 - прокатывает идеально

Сань, ты не о том говоришь. Я говорю про поле text у TextField. Оно String, и не может принимать ничего другого, ровно как и отдавать. Ты не сможешь ему присвоить число без конвертации в тип String. Неважно явным или неявным образом, но конвертация необходима.
Цитата:

tf.text = x / 100 - прокатывает идеально
Не прокатывает. Не знаю что ты там за TextField используешь или Flex SDK, но у меня такой код сразу кидает компайл тайм ошибку:
Цитата:

Error: Implicit coercion of a value of type Number to an unrelated type String.
Естественно, приложение не собирается.
В твоем случае это может сработать, если у тебя "x" не типизированная переменная. Тогда, могу предположить, что вся конструкция может неявным образом конвертнуться в стринг

in4core 03.10.2016 12:52

Костя да, ты прав. Одна из переменных бралась из объекта. Но с другой стороны, тогда это очень странно в любом случае - производя операцию деления или умножения - мы строку не получим ) а оно почему то неявно его преобразует. Почему же когда пишем в лоб не преобразует?

caseyryan 03.10.2016 16:36

Из-за динамической типизации в AS3
Я лично стараюсь всегда использовать правильные типы, где это вообще возможно, чтобы самому себе палки в колеса не ставить

in4core 03.10.2016 20:15

Костя по евентам не очень удобно я считаю делать строгую типизацию, можно конечно создать 101 публичную переменную, а можно 1 типа массива или объекта и в нем передавать кучу всего, чего надо, причем переменные могут быть разных типов. Конечно можно писать каждый раз a[0] as int например, но это так некошерно


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

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