独学ツクールブログ

ツクールでのオリジナル作品の話を中心に創作関係の徒然な語り。

<< RGSS奮闘記47:プリセットを読み解く1(Mainその1) | main | RGSS奮闘記49:プリセットを読み解く3(Mainその3) >>

[ - ] スポンサーサイト

一定期間更新がないため広告を表示しています

| 2018.05.23 Wednesday | - | - |

[ RGSS奮闘記 ] RGSS奮闘記48:プリセットを読み解く2(Mainその2)

引き続きMain。
スクリプト全体は前回を参照。

begin
rescue Errno::ENOENT
end

これが前回言った制御構造「例外処理」だ。
そして前回言った通りこのbeginは「処理を開始せよ」ではない。あくまでも例外処理の適用区間の始まりである。
つまり実はbegin〜endがなくてもスクリプトは動く。試に7行目と18〜23行目をすべてコメントアウトしてからゲームを起動してみてほしい。問題なく始まることが確認できるはずだ。
極端に言うと、begin〜endは18〜22行目のrescue節を有効にするための構文なのである。特定の例外(この場合エラーと呼び換えてもいい)に対して何らかの決まった対応をしたい場合の構造だ。
そして、begin〜endの最大のメリットは、例外が発生した際に処理を打ち切らず何らかの対応するかそのまま継続させることができることだ。まあそうは言ってもRGSSの場合はエラーメッセージを出すだけで処理は中断されるのだが。

ともあれ、RGSSの本質ではない部分にあまり分量を割いても仕方ないので次に進むことにする。
途中の処理を一旦飛ばして、例外処理の続きということでrescue節。
rescueは、特定の例外を捕捉するものである。このスクリプトの場合は「Errno::ENOENT」という例外を拾う。「ENOENT」は「ファイルまたはディレクトリがない」場合の例外だ(「Error NO ENTry」の略?)。
そして例外を捕捉した場合の処理が21〜22行目である。

filename = $!.message.sub("No such file or directory - ", "")
print("ファイル #{filename} が見つかりません。")

まず21行目。filenameはただのローカル変数なので説明は省略。
ところで、ローカル変数は先頭に記号を伴わないのでともすればメソッド呼び出しと紛らわしい場合があるかもしれない。Rubyにおいては、もし同名のローカル変数とメソッドがあった場合はローカル変数であると解釈される。もちろん名前を衝突させないのがベストだが、仮に名前の衝突があるメソッドを呼びたい場合はメソッド名の後ろに丸括弧を付けるかレシーバ(メソッドが実行される対象)を明示する必要がある(詳細は省略)。

$!は前回述べたように例外そのものを参照する特殊変数である(特殊変数についてはリファレンスの「特殊変数」の項を参照)。
これはあくまでも例外そのもののオブジェクトであるので、そのまま表示すると以下のようになる。
※DataフォルダにActors.rxdataが無い場合
#<Errno::ENOENT: No such file or directory - Data/Actors.rxdata>

rubyではオブジェクトそのものを表示する際こういった表記になるので覚えておくといいかも知れない。

続いて、messageはExceptionクラスのメソッドつまり例外というオブジェクトに対し使えるメソッドで、例外のオブジェクトを文字列に変換する(その例外を表す文字列を返すと考えてよい)。
"No such file or directory - Data/Actors.rxdata"

subはStringクラスのメソッドで、一つ目の引数に一致する文字列があった場合二つ目の引数の文字列に置換する。つまり「"No such file or directory - "」を「""」(空っぽ)に置換する。
"Data/Actors.rxdata"

……全部を説明していくと長くなるなあ(笑)


次回はMainの各行の記述について一つずつ解読していく。


タグ:[Ruby] [RGSS] [プリセットを読み解く] [Main]

| 2011.04.06 Wednesday 23:36 | comments(0) | trackbacks(0) |

[ - ] スポンサーサイト

| 2018.05.23 Wednesday 23:36 | - | - |

コメント

コメントする






この記事のトラックバックURL

トラックバック

このページの先頭へ▲

Twitter

WebClap

Blogram

ブログランキングならblogram

calendar

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< October 2019 >>

categories

archives

Amazon

selected entries

recent comment

recent trackback

recent ranking

links

search this site.

sponsored links

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM