PDA

Просмотр полной версии : Не получается replace()


ShockWave1024
07.08.2007, 16:16
private function RemoveText(s:String):void {
text.replace(s, "");
}
в мануале написано что - s может быть регулярным или строковым выражением, но не работает ...
подскажите кто знает ...
(можно ли вставить переменную в регулярное выражение???)

etc
07.08.2007, 16:36
0. Почему имя функции похоже на имя класса?
1. Что такое text?

ShockWave1024
07.08.2007, 16:58
упс, простите
private function removeText(s:String):void {
var text:String = new String("Hello world!!!");
text.replace(s, "");
}

silin
07.08.2007, 17:06
function removeText(s:String):void {
var text:String = new String("Hello world!!!");
var replacedText:String=text.replace(s, "");
trace(replacedText);
}
removeText("ll");//Heo world!!!

etc
07.08.2007, 17:08
А зачем создавать целый объект для данных простого типа вроде String?

__i
07.08.2007, 18:30
А зачем создавать целый объект для данных простого типа вроде String?
В данном случае это по барабану ) что сторока как ты ее не создавай всеравно это объект типа строка

etc
07.08.2007, 18:51
Нет, не по барабану:

function test():void {
var a:String = "a";
var b:String = new String("b");
}

На выходе:

package classes_fla {
import flash.display.MovieClip;

public dynamic class MainTimeline extends MovieClip {

public function MainTimeline() {
// D0 30 D0 49 00 5D 07 24 00 60 04 4F 07 02 47
this.super();
addFrameScript(0, frame1);
}

internal function frame1():* {
// D0 30 47
}

public function test():void {
// D0 30 20 85 D5 20 85 D6 2C 0A D5 5D 06 2C 0C 4A 06 01 85 D6 47
var _local1:String = null;
var _local2:String = null;
_local1 = "a";
_local2 = new String("b");
}
}
}
P-Code:
0:GETLOCAL_0
1:PUSHSCOPE
2:PUSHNULL
3:COERCE_S
4:SETLOCAL_1
5:PUSHNULL
6:COERCE_S
7:SETLOCAL_2
8:PUSHSTRING "a"
10:SETLOCAL_1
11:FINDPROPSTRICT
13:PUSHSTRING "b"
15:CONSTRUCTPROP
18:COERCE_S
19:SETLOCAL_2
20:RETURNVOID

Если для инициализации первой переменной нужно:

pushstring "a"
setlocal_1

То для второй уже:

findpropstrict
pushstring "b"
constructprop
coerce_s
setlocal_2

Легко проверить:

var t:uint = getTimer();
for (var i:uint = 0; i< 40000000; i++) {
var a:String = "String";
}
trace(getTimer()-t);// 751
t = getTimer();
for (i = 0; i< 40000000; i++) {
var b:String = new String("String");
}
trace(getTimer()-t);// 4009

Разница в скорости — пять с лишним раз.

__i
07.08.2007, 20:00
уговорил )), но в данном примере это по барабану :D