携帯コンテンツ(Flashlite1.1)の制作でsubstringやmbsubstring関数で妙な挙動をみつけました。

文字を一字づつとりだす処理をしていたら、文字列の一文字目が2度現れるというものでした。

str = "12345"; for( i=0; i<length( str ); ++i ) {  trace( i add " : " add substring( str, i, 1 ) ); }

一見するといけそうなのですが下記のようになってしまいました。

0 : 1 1 : 1 2 : 2 3 : 3 4 : 4

おかしいなーと思ったんですが、実はこれバグではなくてヘルプを見ると下記のように書いてありました。

シンタックス

substring( value, index, count );

パラメータ

string 新しいストリングを抽出する元のストリング。
index 抽出する最初の文字の番号。
count 抽出するストリングに含める文字数。インデックス文字を除きます。

説明

関数。ストリングの一部を抽出します。この関数は 1 から始まります。一方、String クラスのメソッドは 0 から始まります。

Flashliteの場合、indexは1から始まる仕様ということですね。

ためしに、パブリッシュ設定を4~8、Flashlite1.0や2.0に変えても同じでした。
つまりFlash4時代のグローバル関数の仕様とStringクラスのメソッドの仕様がちがうだけのようです。
0のとき、1とまったく挙動なのがかなり紛らわしいと思いました。
mbsubstringも同様です。

Flash4を触ってないと、ハマりやすいんじゃないかと思ったのでエントリにしてみました。

HTML5飯