Форум 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)
-   -   Проблема с реализацией класса (http://www.flasher.ru/forum/showthread.php?t=91153)

vic_ 26.01.2007 02:59

функция controllElem(param:Array)
уже после строчки
var shifter:Array = (param.length != 1) ? param.shift() : param;
массив трейсится как ноль

Madeyra 26.01.2007 03:11

На том же сайте:
Цитата:

mbd said on Feb 15, 2006 at 10:35 AM :
The Void return definition is incorrect. The reverse method actually returns the Array in question. This also includes the class file, which indicates Void, yet it REALLY does return the Array.
он прав:
Код:

var g:Array = [1,2,3]
var w = g.reverse()
trace(w instanceof Array) //true

с реверсом проблем нет так в противном случае была бы

Цитата:

The expression returned must match the function's return type.

Madeyra 26.01.2007 03:19

Цитата:

Сообщение от vic_
функция controllElem(param:Array)
уже после строчки
var shifter:Array = (param.length != 1) ? param.shift() : param;
массив трейсится как ноль

не понял после какой строчки

vic_ 26.01.2007 03:23

Код:

class Vector {
        public var coordinates:Array;
        public function Vector(arr:Array) {
                this.coordinates = this.controllElem(arr);
        }
        public function dimension():Array {
                var misc = this.coordinates.concat();
                return misc;
        }
        public function length(roundable:Boolean):Number {
                roundable = (roundable == null || !(typeof roundable == "boolean") || !roundable) ? false : true;
                var misc = this.coordinates.concat();
                var summ:Number = 0;
                for (var i in misc) {
                        summ += Math.pow(misc[i], 2);
                }
                return (roundable) ? Math.round(Math.sqrt(summ)) : Math.sqrt(summ);
        }
        private function controllElem(param:Array):Array {
                if(param.length != 1)param.shift();
                var total:Number=param.length;
                var shifter:Array = [];
                for(var i:Number=0;i<total;i++){
                        shifter[i] = isNaN(param[i]) ? 0 : param[i];
                }
                return shifter;
        }
        public function coord(param:Array) {
                this.coordinates = this.controllElem(arguments);
        }
        public function invert():Vector {
                var __coord:Array=[];
                for (var i:Number=0;i<coordinates.length;i++) {
                        __coord[i] = -1*coordinates[i];
                }
                var __vec:Vector = new Vector(__coord);               
                trace(__vec.coordinates);       
        return __vec;
        }
}

работает правильно?

Madeyra 26.01.2007 10:48

неа. нужно чтобы свойство coodinates возвращало первый элемент arguments. т.е. массив, но в этом случае оно возвращает этот массив без первого элемента

Madeyra 26.01.2007 11:48

решил. функцию controllElem() переделал таким образом:
Код:

private function controllElem(param:Array):Array {
                var __len = param[0].length;
                for (var i = 0; i < __len; i++) {
                        if (isNaN(param[0][i])) {
                                param[0][i] = 0;
                        }
                }
                return param[0];
        }

спасибо vic_ и __etc за помощь

vic_ 26.01.2007 11:53

ну так убрать shift, я думал так нужно по ходу задачи

etc 26.01.2007 11:53

У меня есть большое подозрение, что ты усложняешь задачу какими-то ненужными циклами, шифтами, реверсами…

Madeyra 27.01.2007 01:25

Цитата:

Сообщение от __etc
У меня есть большое подозрение, что ты усложняешь задачу какими-то ненужными циклами, шифтами, реверсами…

а что делать - пока что называется учусь. одно дело когда человек занимается уже пятый год а совсем другое когда всего 7 месяцев.
может со временем приду к более правильному решению задач.
запустался в том, что один метод класса Array возвращает Array, другой Object, третий Void, еще String и Number. Мультикласс такой...:D


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

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