• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:String.prototype.split2d 理解できません)

String.prototype.split2dについて

このQ&Aのポイント
  • String.prototype.split2d関数について理解することができません。
  • アクションスクリプトを独学している中で、String.prototype.split2dというコードを見つけましたが、その使い方や意味がわかりません。
  • 検索しても情報が見つからず、どなたか教えていただけないでしょうか?また、String.prototype.split2d関数はどのような場面で使われるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.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  

karisuma79
質問者

お礼

BlurFiltan様、ご回答ありがとうございます!!! 普通の書き方だとこうですか、、、 本当に、勉強になりました。 ありがとうございました!

その他の回答 (2)

回答No.2

ただの日本語間違い?かと思いますが 結果をtmpArにreturn というよりは 結果のtmpArをreturn というべきかと ところでいま気付いたんですが trace(tmpAr[0][0]); ってほんとは trace(tmp[0][0]); って書きたかったんじゃないですかね? でないとなんのためにtmpにsplip2dの 戻り値代入したん?ってカンジです まあ多分結果はおんなじ?だと思うんですが・・・

karisuma79
質問者

お礼

H240S18B73様、ご回答ありがとうございます!! 良い、参照になりました。 これからもよろしくお願いします。

回答No.1

Stringクラスはdynamicクラスじゃないから 後からプロパティやメソッドを追加できないし かといってfinalクラスなんでクラスの拡張もできないから クラスにメソッド追加したかったら 大元の継承元のObject、prototypeに書いちゃおうという話 これでStringクラスに"|"と","で文字列を2次元(2D)配列にしちゃう split2dメソッドなんて機能追加しちゃうよ、ってカンジですね

karisuma79
質問者

補足

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]); 間違いところがありましたら、指摘よろしくお願いいたします。

関連するQ&A