PDA

Просмотр полной версии : Возможности switch


in4core
24.11.2009, 13:48
Интерисует след проблема :

switch(_tx.text) {
case "FFF":
someFunc();
break;
/// далее идет вопрос
case "FFF"+n: // где n рандомное число вводимое пользователем. например FFF33
someFunc(n);

Естввенно работать так не будет ибо передает строку. можно ли это сделать как нибудь именно через свитч как в моем примере ?

iflamberg
24.11.2009, 14:18
думаю, нет

in4core
24.11.2009, 14:19
разве нельзя текст в поле переконвертировать в число ? и выдать typeof Number ? думал можно. как число в строку к примеру так и наоборот

iflamberg
24.11.2009, 14:29
аа, слушай, я вообще вопроса не понял.
мм... и сейчас не понимаю. Не работает конструкция case "FFF"+n: ?
Дык она работает:

var some:String = "12";

var t:String = "123";

switch (t){
case some+"3": trace("ok"); break;
}

mooncar
24.11.2009, 14:33
Видимо, автор хочет при выполнении условия "откусить" с конца хвостик n и передать его аргументом типа Number в вызываемую функцию someFunc(n)?

iflamberg
24.11.2009, 14:40
ну можно откусить с помощью String.substring.

mooncar
24.11.2009, 15:02
var str:String = _tx.text.substr(-1, 1); //получаем отрезанный с конца один символ
var n:Number = Number(str); //приводим к Number

someFunc(n);

function someFunc (num) {
if (isNaN(num)) {
trace('введено только три символа или на конце не цифра');
}
else {
switch (num) {
case 1:
trace('на конце 1');
break ;
case 2:
trace('на конце 2');
break ;
}
}
}

in4core
24.11.2009, 15:35
фак. конечно все это хорошо - но цифры могут быть от 0 до 100 это раз.
код приблиз выглядет так :

function SHOW() {
if(_global.h and Key.isDown(Key.ENTER)) {
switch(_tx.text) {
case "FFF"+n:
func(n);
break;
}
}
}
Конструкция должна быть именно такой, а ты вынес функцию и в ней сделал кейсы.

Добавлено через 6 минут
Объясняю смысл работы : Пользователь вводит определенный кодец в текстовое поле = например setSound. Компилятор спрашивает сколько надо вам установить громкость? пользователь вводит число. Функция выполняется соотв этому числу.

Тоесть
switch(_tx.text) {
case "setSound":
someField._text = " Установите громкость";
bul = true;
break;
case SOME_FUCK_NUMBER:
if(bul) {
bul = false;
func(_tx.text)
}
break;
}
function func(n) {
snd.setVolume(n);
};
Ну вот пример чего хочу реализовать. думаю теперь понятно. Нужно именно в такой конструкции свича как у меня

mooncar
24.11.2009, 15:42
Главное в моем примере - вот это, о чем ты спрашивал:
var str:String = _tx.text.substr(-1, 1); //получаем отрезанный с конца один символ
var n:Number = Number(str); //приводим к Number
А где лучше поставить свич - до вызова функции или прямо в ней (я думаю, что лучше прямо в ней) и как понять, сколько откусывать с конца - это уже некий алгоритм, который тебе придумать...

Добавлено через 1 минуту
Оффтоп:
Не путай - компилятор - эта штука, которая работает только при создании SWF.
А при работе swf-ки работает плеер.
И в коде делай отступы внутри логических блоков - желание разбирать твой код исчезает.

in4core
24.11.2009, 15:44
А если посекретничать заодно ) я делаю проект свой, и в нем хочу реализовать кроме как ручную работу проекта - тоесть нажатие мышкой на кнопки и прочее. Еще и кодовую часть. типа консоль. В которой можно устанавливать че хошь, удалить любой клюп например, сделать глобальную громкость и прочее. И еще много фукнций недоступных для ручного)))).

Добавлено через 48 секунд
Ну я думаю ты понял теперь - что я имел ввиду под СЛОВОМ компилятор в данный момент.

mooncar
24.11.2009, 15:49
Ну я думаю ты понял теперь - что я имел ввиду под СЛОВОМ компилятор в данный момент.
Когда читатель форума тратит свое время еще и на понимание того, что хотел сказать автор в тот или иной момент, времени на реальную помощь автору уже может не хватить - имей ввиду. :)

in4core
24.11.2009, 16:56
Mooncar - кстати вы не верно написали. Я спросил как передать в CASE параметр а не в функцию.

Добавлено через 2 минуты
Потому что в case передать не удается с вашим методом.

Повторяю надо именно
case "SomeText"+SOMENUMBER:
func(SOMENUMBER);
break;
Далее в поле пишется : SomeText50 , соответсвенно функция запускается func(50);
Вот что неясно как сделать

mooncar
24.11.2009, 18:10
Это детали исполнения. Я просто предложил способ отнять с конца строки символ и из String привести переменную, где он содержится к Number типу, если у вас в дальнейшем используется Number.
Откуда иначе взяться значению SOMENUMBER?
Вам в любом случае нужно разбирать строку, введенную в _tx.text, чтобы из нее что-то выжать нужное. Делайте это перед switch.