Трассировка AS3 без перевода строки - PullRequest
0 голосов
/ 21 августа 2010

В целях диагностики я хочу напечатать матрицу (массив массивов). Делать это с помощью цикла означает выполнение команды трассировки несколько раз, что, на мой взгляд, исключает возможность печати нескольких ячеек таблицы в одной строке.

(При кодировании trace(x); trace(y); разрыв строки падает между x и y.)

Что я могу сделать?

Ответы [ 4 ]

1 голос
/ 26 июля 2012

Чтобы решить эту проблему, я лично создал новый класс, который позволяет мне писать в класс; затем выполните команду трассировки:

public class TraceHolder {

    private var txt:String = "";

    public function TraceHolder() {
        // constructor code
    }
    public function writeTo(inStrg:String) : void
    {
        txt = txt.concat(inStrg);
    }
    public function execute() : void
    {
        trace(txt);
        txt = "";
    }

}

То, что позволяет мне сделать это:

var th:TraceHolder = new TraceHolder();
th.writeTo("blah blah blah the front of the line");
th.writeTo("blah blah blah");
th.writeTo("blah blah blah end of the line");
th.execute();

Что бы отследить это:

blah blah blah the front of the lineblah blah blahblah blah blah end of the line

Просто, эффективно и чертовски полезно.

1 голос
/ 21 августа 2010

следующий код ...

var jaggedArray:Array = new Array(new Array(" 1 "," 2 ", " 3 "), new Array(" 3 ", " 4 ", " 5 "));
var output:String = "";
for( var i:Number = 0; i < jaggedArray.length; ++i){
    for(var j:Number = 0; j < jaggedArray[i].length; ++j){
            output += jaggedArray[i][j];
    }
    output += "\n";
}
trace(output);

... выдает следующий вывод:

alt text

Это то, что вы ищете? Если это так, не используйте некрасивую конкатенацию строк, как я, лучше использовать буфер, как описано в вопросе SO .

Зубчатый массив - это массив, элементы которого являются массивами. Особенность его в том, что его элементы могут быть разного размера.

1 голос
/ 11 декабря 2010
var x:int=10, y:int=x/2, z:int=y*2;
// trace as single space-delimited line:
trace(x, y, z); // 10 5 10

но для массивов вы можете сделать это так:

var a1:Array = [1, 2, 35678];
var a2:Array = [124, 5, 6];
var a3:Array = [7, 128, 9];
var mtx:Array = [a1, a2, a3];
for each(var row:Array in mtx) {
    trace(row.join('\t'));
    // or use delimiter function
    // to right align values...
}
1 голос
/ 21 августа 2010

Вы можете использовать "\n", чтобы разбить оператор трассировки на несколько строк.Я не совсем уверен, если это то, что вы спрашивали в своем вопросе.

Если вы используете flex, вы можете использовать ObjectUtil.toString () для преобразования объекта (вложенных массивов) в строковое представление.

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

var rowText:String = "";
trace ("BEGIN tracing rows");
for each (var row:Array in rows)
{
   for each (var value:String in row)
   {
       rowText = rowText + value + " ";
   }
   trace (rowText);
}
trace("END tracing rows");
...