- ファイルコマンドでシーン名をクエリー。
- その文字列をスラッシュで分割。
- ファイル名の一つ前まで繋げる。
みたいな感じでしょうか。
で、MELにすると2つの書き方ができます。
まず、文字列の分割にstringToStringArrayコマンドを使う場合
1 2 3 4 5 6 7 8 9 10 11 | { string $file =`file -q -sn`; string $temp []=stringToStringArray( $file , "/" ); string $path ; for ( $i =0; $i <(`size $temp `-1); $i ++ ) $path +=( $temp [ $i ]+ "/" ); print ( "\n$path: " + $path + "\n" ); } |
そして、文字列の分割にtokenizeコマンドを使う場合
1 2 3 4 5 6 7 8 9 10 11 12 | { string $file =`file -q -sn`; string $temp []; int $token =tokenize( $file , "/" , $temp ); string $path ; for ( $i =0; $i <( $token -1); $i ++ ) $path +=( $temp [ $i ]+ "/" ); print ( "\n$path: " + $path + "\n" ); } |
で、引っかかった部分は、stringToStringArrayコマンドを使った場合の、for 内の(`size $temp`-1)
JavaScriptなんかでは、パフォーマンス改善のテクニックで.lengthみたいなプロパティ参照を使わず.lengthを変数に代入した方がコストが下がるとかあったりしますが、sizeコマンドのコストはどのくらいなのだろうか?
ということです。
ま、コスト的に微々たる物なんでしょうけども・・・。
なんか気持ち悪い。
melのプロファイラなんかで見るとsizeコマンドの参照数が真っ赤になりそうではあるけれども。
そんなかんじで、forの中から(`size $temp`-1)を抜き出すと
4 5 6 7 8 | string $temp []=stringToStringArray( $file , "/" ); int $back =(`size $temp `-1); string $path ; for ( $i =0; $i < $back ; $i ++ ) $path +=( $temp [ $i ]+ "/" ); |
みたいにtokenizeと変わらない、逆にタイピング数多くなっていると言うね。
気にしない人は気にしないようなどうでも良い話でした。
0 件のコメント:
コメントを投稿