- ベストアンサー
String.prototype.split2dについて
- String.prototype.split2d関数について理解することができません。
- アクションスクリプトを独学している中で、String.prototype.split2dというコードを見つけましたが、その使い方や意味がわかりません。
- 検索しても情報が見つからず、どなたか教えていただけないでしょうか?また、String.prototype.split2d関数はどのような場面で使われるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ご質問のスクリプトですが, 普通の書き方にすると次のようになります。 ------------------------------- split2d = function (str) { tmpAr = str.split("|"); for (j=0; j<tmpAr.length; j++) { tmpAr[j] = tmpAr[j].split(","); } return tmpAr; }; myString = "1,2,3,4|5,6,7,8|9,10,11,12"; tmp = split2d(myString); trace(tmp[0][0]); ------------------------------- ↓型指定を入れた方がわかり易い?↓ ------------------------------- split2d = function (str:String):Array { var tmpAr:Array = str.split("|"); for (var j:Number=0; j<tmpAr.length; j++) { tmpAr[j] = tmpAr[j].split(","); } return tmpAr; }; var myString:String = "1,2,3,4|5,6,7,8|9,10,11,12"; var tmp:Array = split2d(myString); trace(tmp[0][0]); ------------------------------- 上が ActionScript 1.0 風で 下が ActionScript 2.0 風です。 これを あえて普通ではない, Stringクラスの拡張メソッドもどき的な書き方をすると, ご質問のようなう書き方もできますよ。 ということでしょう。 普通は上で書いたようにするので, ご質問のスクリプト自体には全く有り難みを感じませんが, ご質問の "スクリプト自体が重要" なのではなく, このような書き方をすると何かの時に使えるかもしれませんね。 という "スクリプトの可能性" を書いているのだと思います。 > split2dはなんですか? 作者が勝手に作った(命名した),メソッド名(匿名関数参照の変数名)です。 以下は,#2の方が書かれていらっしゃる内容と同じでが。 ・ご質問のスクリプトの訂正 trace(tmpAr[0][0]); ↓訂正↓ trace(tmp[0][0]); ・補足内容の訂正 > //結果をtmpArにreturn > return tmpAr ↓訂正↓ //できた配列 tmpAr を return(戻り値として返す) return tmpAr
その他の回答 (2)
- H240S18B73
- ベストアンサー率65% (190/288)
ただの日本語間違い?かと思いますが 結果をtmpArにreturn というよりは 結果のtmpArをreturn というべきかと ところでいま気付いたんですが trace(tmpAr[0][0]); ってほんとは trace(tmp[0][0]); って書きたかったんじゃないですかね? でないとなんのためにtmpにsplip2dの 戻り値代入したん?ってカンジです まあ多分結果はおんなじ?だと思うんですが・・・
お礼
H240S18B73様、ご回答ありがとうございます!! 良い、参照になりました。 これからもよろしくお願いします。
- H240S18B73
- ベストアンサー率65% (190/288)
Stringクラスはdynamicクラスじゃないから 後からプロパティやメソッドを追加できないし かといってfinalクラスなんでクラスの拡張もできないから クラスにメソッド追加したかったら 大元の継承元のObject、prototypeに書いちゃおうという話 これでStringクラスに"|"と","で文字列を2次元(2D)配列にしちゃう split2dメソッドなんて機能追加しちゃうよ、ってカンジですね
補足
H240S18B73様、ご回答ありがとうございます。 100%理解できたとは断言できませんが、 なるほど、、っていう感じです。 2次元(2D)配列の配列をするから、split2dで、2dがありますね。 ありがとうございました。 一行ずつコード分析すると、、 //メソッド追加 String.prototype.split2d = function () { //これを|で配列にして、tmpArに代入、tmpArは配列、、 tmpAr = this.split("|"); //配列の要素個数を利用し、2次元配列にする。 for (j=0; j<tmpAr.length; j++) { tmpAr[j] = tmpAr[j].split(","); } //結果をtmpArにreturn return tmpAr }; myString = "1,2,3,4|5,6,7,8|9,10,11,12"; tmp = myString.split2d(); trace(tmpAr[0][0]); 間違いところがありましたら、指摘よろしくお願いいたします。
お礼
BlurFiltan様、ご回答ありがとうございます!!! 普通の書き方だとこうですか、、、 本当に、勉強になりました。 ありがとうございました!