![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2006
Сообщений: 16
|
Есть следующий код:
class Vector {
public var coordinates:Array;
public function Vector() {
this.coordinates = this.controllElem(arguments);
}
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 there are more than one element in arguments, return shifted
var shifter:Array = (param.length != 1) ? param.shift() : param;
shifter.reverse();
for (var i in shifter) {
//elements can be not a number - in this case just set as 0
shifter[i] = isNaN(shifter[i]) ? 0 : shifter[i];
}
var reverse = shifter.reverse();
return reverse;
}
public function coord(param:Array) {
this.coordinates = this.controllElem(arguments);
}
public function invert():Vector {
var __coord = coordinates;
for (var i in __coord) {
__coord[i] *= -1;
}
trace(__coord);
var __vec:Vector = new Vector(__coord);
trace(__vec.coordinates);
return __vec;
}
}
в выделенном месте создается еще один экземпляр класса, но проблема в том, что трейсится всегда ноль, хотя по идее должно быть инвертированные координаты вектора. Не могу понять в чем дело... ![]() Последний раз редактировалось Madeyra; 26.01.2007 в 01:53. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Я тоже не могу понять, что значит «создается ещё один экземпляр класса» и «трейсится всегда ноль».
И с какой стати должно быть что-то иное, кроме пустого массива, если у вас в конструкторе нет параметра с массивом координат? |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 16
|
попробую вот так объяснить:
метод invert() данного вектора создает еще один вектор у которого каждая координата является числом, равным произведению соответствующей координаты данного вектора на -1. где __сoord - массив с координатами данного вектора умноженными на -1. И свойство coordinates этого вектора выводится как равным нулю Последний раз редактировалось Madeyra; 26.01.2007 в 02:39. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А где происходит обработка полученного в конструкторе массива? У вас — нигде не происходит, конструктор вообще принимает 0 параметров. Зачем юзать arguments там, где не надо?
Впрочем, строка var reverse = shifter.reverse(); меня сильно смущает. Метод reverse возвращает Void, между прочим. И ещё не понимаю смысла в двойном развороте массива. Последний раз редактировалось etc; 26.01.2007 в 02:42. |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 16
|
|
|
|||||
|
Регистрация: Sep 2006
Адрес: Zaporozhye, Ukraine
Сообщений: 141
|
arguments обрабатывает. не совсем читабельно, но почему нет
|
|
|||||
|
Регистрация: Sep 2006
Сообщений: 16
|
в смысле код не читабельный?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
В смысле код кривой. Про reverse я уже сказал (во-первых он не нужен, во-вторых если надо получить ничего, то проще return вообще не писать).
|
|
|||||
|
Регистрация: Sep 2006
Сообщений: 16
|
если использовать for...in для массива на примере
var a:Array = [1,2,3]
for(i in a) {
trace(a[i])
}
использовать что касается return то надо получить новый вектор |
![]() |
![]() |
Часовой пояс GMT +4, время: 06:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|