80
X 3017 : 2013 (ISO/IEC 30170 : 2012)
あって値がVであるインスタンス変数束縛とをもつLocalJumpErrorクラスの直接のインスタン
スを例外として発生させる。
11.5.2.4.4 next式
構文規則
《next式》 ::=
《実引数なしnext》
|《実引数付きnext》
《実引数なしnext》 ::
“next”
《実引数付きnext》 ::
“next” 《ジャンプ実引数》
意味規則
《next式》は,次の手順で評価する。
a) 《ジャンプ実引数》が存在する場合,それを11.5.2.4.2 b)で規定するとおりに評価する。
b) 現在の《ブロック》が存在する場合,現在の《ブロック》の《ブロック本体》の評価を終了させる(11.3.3
参照)。
c) 現在の《繰返し式》が存在する場合,《next式》が現在の《繰返し式》の条件式内にあるときはその条件式
の評価を,本体内にあるときはその本体の評価を終了させる(11.5.2.3参照)。
d) 現在の《ブロック》又は現在の《繰返し式》が存在しない場合,次の手順を行う。
1) 名前が “next” であるSymbolクラスの直接のインスタンスを,Sとする。
2) 《next式》の《ジャンプ実引数》が存在する場合,Vをその《ジャンプ実引数》の値とする。そうではな
い場合,Vをnilとする。
3) 名前が “@reason” であって値がSであるインスタンス変数束縛と,名前が “@exitvalue” で
あって値がVであるインスタンス変数束縛とをもつLocalJumpErrorクラスの直接のインスタン
スを例外として発生させる。
11.5.2.4.5 redo式
構文規則
《redo式》 ::
“redo”
意味規則
《redo式》は,次の手順で評価する。
a) 現在の《ブロック》が存在する場合,現在の《ブロック》の《ブロック本体》の評価を終了させる(11.3.3
参照)。
b) 現在の《繰返し式》が存在する場合,《redo式》が現在の《繰返し式》の条件式内にあるときはその条件式
の評価を,本体内にあるときはその本体の評価を終了させる(11.5.2.3参照)。
c) 現在の《ブロック》又は現在の《繰返し式》が存在しない場合,次の手順を行う。
1) 名前が “redo” であるSymbolクラスの直接のインスタンスを,Sとする。
2) 名前が “@reason” であって値がSであるインスタンス変数束縛と,名前が “@exitvalue” で
あって値がnilであるインスタンス変数束縛とをもつLocalJumpErrorクラスの直接のインスタン
――――― [JIS X 3017 pdf 86] ―――――
81
X 3017 : 2013 (ISO/IEC 30170 : 2012)
スを例外として発生させる。
11.5.2.4.6 retry式
構文規則
《retry式》 ::
“retry”
意味規則
《retry式》は,次の手順で評価する。
a) 現在のメソッド呼出し(13.3.3参照)が存在した場合,Mをそのメソッド呼出しに対応する《メソッド
本体》とする。そうではない場合,Mを現在評価中の《プログラム》(10.1参照)とする。
b) 内の,この《retry式》を内包する最も内側の《rescue節》をEとする。そのような《rescue節》が存在し
ない場合,動作は未規定とする。
c) の《then節》の《複合文》の評価を終了する(11.5.2.5参照)。
11.5.2.5 begin式
構文規則
《begin式》 ::
“begin” 《本体文》 “end”
《本体文》 ::
《複合文》 《rescue節》* 《else節》・ 《ensure節》・
《rescue節》 ::
“rescue” [《行終端子》禁止] 《例外クラスリスト》・ 《例外変数代入》・ 《then節》
《例外クラスリスト》 ::
《演算子式》
|《多重代入右辺》
《例外変数代入》 ::
“=>” 《左辺》
《ensure節》 ::
“ensure” 《複合文》
意味規則
《begin式》の値はその《本体文》の評価結果の値とする。
《本体文》は,次の手順で評価する。
a) 《本体文》の《複合文》を評価する。
b) 手順a)で例外が発生しなかった場合,又は発生した全ての例外が処理された場合は,次の手順を行う。
1) 《else節》が存在する場合,《else節》を11.5.2.2.2で規定するとおりに評価する。
2) 《ensure節》が存在する場合,その《複合文》を評価する。評価結果の値を,《ensure節》の値とする。
3) 《else節》及び《ensure節》の両方が存在する場合,《本体文》の値は《ensure節》の値とする。《else節》
又は《ensure節》のいずれかだけが存在する場合,《本体文》の値は存在する方の値とする。
4) 《else節》及び《ensure節》のどちらも存在しない場合,《本体文》の値はその《複合文》の値とする。
c) 手順a)で例外が発生し処理されなかった場合は,それぞれの《rescue節》について,それらがプログラ
ムテキストに現れる順に,次のとおり発生した例外を処理できるかどうか判断する。
――――― [JIS X 3017 pdf 87] ―――――
82
X 3017 : 2013 (ISO/IEC 30170 : 2012)
1) 発生した例外をEとする。
2) 《rescue節》の《例外クラスリスト》が存在せず,かつ,EがStandardErrorクラスの直接のインス
タンスの場合,この《rescue節》はEを処理できる。
3) 《rescue節》の《例外クラスリスト》が存在する場合,次の手順を行う。
i) 《例外クラスリスト》が《演算子式》の場合,その《演算子式》を評価する。空の値リストを作成し,
評価結果の値をそのリストに追加する。
ii) 《例外クラスリスト》が《多重代入右辺》の場合,その《多重代入右辺》から値リストを作成する
(11.4.2.4参照)。
iii) 上記のとおりに《例外クラスリスト》を評価することで作成されたリストをLとする。Lのそれぞ
れの要素Dについて,次の手順を行う。
I) がExceptionクラスでもExceptionクラスのサブクラスでもない場合,TypeErrorクラ
スの直接のインスタンスを例外として発生させる。
II) がDのインスタンスの場合,この《rescue節》はEを処理できる。この場合,この《本体文》の
残りの《rescue節》は判断を行わない。
d) を処理できる《rescue節》Rが見つかった場合,次の手順を行う。
1) の《例外変数代入》が存在する場合,《左辺》 “=” 《多重代入右辺》という形式であり,《多重代入右
辺》の値がEであるような《多重代入文》と同様にその《例外変数代入》を評価する。
2) の《then節》の《複合文》を評価する。この評価が《retry式》によって終了された場合,手順a)から処
理を続ける。そうではない場合,Vを評価結果の値とする。
3) 《ensure節》が存在する場合,それを評価する。《本体文》の値は,《ensure節》の値とする。
4) 《ensure節》が存在しない場合,《本体文》の値はVとする。
e) 《rescue節》が存在しないか,Eを処理できる《rescue節》が存在しなかった場合,次の手順を行う。
1) 《ensure節》が存在する場合,それを評価する。
2) 《本体文》の値は未規定とする。
《本体文》の《ensure節》が存在する場合,《ensure節》は,《本体文》の評価が《ジャンプ式》によって終了さ
れた場合も含め,必ず評価される。
11.5.3 グループ化式
構文規則
《グループ化式》 ::
“(” 《式》 “)”
|“(” 《複合文》 “)”
意味規則
《グループ化式》は,次の手順で評価する。
a) 《式》又は《複合文》を評価する。
b) 評価結果の値を《グループ化式》の値とする。
――――― [JIS X 3017 pdf 88] ―――――
83
X 3017 : 2013 (ISO/IEC 30170 : 2012)
11.5.4 変数参照
11.5.4.1 概要
構文規則
《変数参照》 ::
《変数》
|《擬似変数》
《変数》 ::
《定数識別子》
|《大域変数識別子》
|《クラス変数識別子》
|《インスタンス変数識別子》
|《局所変数識別子》
《スコープ付き定数参照》 ::
《一次式》 [《行終端子》禁止][《空白類》禁止] “::” 《定数識別子》
|“::” 《定数識別子》
《変数》及び《スコープ付き定数参照》については,11.5.4.2から11.5.4.7までを参照。
《擬似変数》については,11.5.4.8を参照。
11.5.4.2 定数
《定数識別子》は,次の手順で評価する。
a) 評価する《定数識別子》を,Nとする。
b) 名前がNである定数束縛を,次のとおり探す。
次の手順において,束縛が見つかった場合,すぐに《定数識別子》の評価を終了し,見つかった束縛
の値を《定数識別子》の値とする。
c) を クラスモジュールリストの一番上の要素とする。Lのそれぞれの要素に対し,最初(すなわち,
現在のクラス又はモジュール)から最後まで順に,名前がNである定数束縛を探す。ただし,Lの最
後の要素であるObjectクラスは除く。
d) 束縛が見つからない場合,Cを現在のクラス又はモジュールとする。
LをCのインクルードモジュールリストとする。Lのそれぞれの要素に対し,リスト内と逆順に,
名前がNである定数束縛を探す。
e) 束縛が見つからない場合,次の手順を行う。
1) がClassクラスのインスタンスの場合,次の手順を行う。
i) Cが直接のスーパークラスをもたない場合,名前がNであるSymbolクラスの直接のインスタン
スを作り,それをRとする。constmissingメソッドを,現在のクラス又はモジュールに対し,
Rを実引数として呼び出す。呼出し結果の値を《定数識別子》の値とする。
ii) が直接のスーパークラスをもつ場合,SをCの直接のスーパークラスとする。
iii) に対し,名前がNである定数束縛を探す。
iv) 束縛が見つからない場合,LをSのインクルードモジュールリストとし,Lのそれぞれの要素に
対し,リスト内と逆順に,名前がNである定数束縛を探す。
v) 束縛が見つからない場合,CをSの直接のスーパークラスとする。手順e) 1) )から処理を続ける。
――――― [JIS X 3017 pdf 89] ―――――
84
X 3017 : 2013 (ISO/IEC 30170 : 2012)
2) がClassクラスのインスタンスでない場合,次の手順を行う。
i) Objectクラスに対し,名前がNである定数束縛を探す。
ii) 束縛が見つからない場合,LをObjectクラスのインクルードモジュールリストとし,Lのそれ
ぞれの要素に対し,リスト内と逆順に,名前がNである定数束縛を探す。
iii) 束縛が見つからなかった場合,名前がNであるSymbolクラスの直接のインスタンスを作り,そ
れをRとする。constmissingメソッドを,現在のクラス又はモジュールに対し,Rを実引数
として呼び出す。呼出し結果の値を《定数識別子》の値とする。
11.5.4.3 スコープ付き定数
《スコープ付き定数参照》は,次の手順で評価する。
a) 《一次式》が存在する場合,それを評価し,Cを評価結果の値とする。そうではない場合,CをObject
クラスとする。
b) がModuleクラスのインスタンスでない場合,TypeErrorクラスの直接のインスタンスを例外と
して発生させる。
c) がModuleクラスのインスタンスである場合,次の手順を行う。
1) 評価対象の《定数識別子》を,Nとする。
2) 名前がNである束縛がCの定数束縛の集合内に存在する場合,《スコープ付き定数参照》の値はその
束縛の値とする。
3) そうではない場合,次の手順を行う。
i) Cのインクルードモジュールリストを,Lとする。名前がNである定数束縛をL内から,リスト
内と逆順に探す。
ii) 束縛が見つかった場合,《スコープ付き定数参照》の値はその束縛の値とする。
iii) 束縛が見つからず,かつ,CがClassクラスのインスタンスの場合,名前がNである定数束縛
の探索を,11.5.4.2の手順e)から行う。
iv) 束縛が見つからず,かつ,CがClassクラスのインスタンスでない場合,名前がNであるSymbol
クラスの直接のインスタンスを作り,それをRとする。constmissingメソッドを,Cに対し
Rを実引数として呼び出す。
11.5.4.4 大域変数
《大域変数識別子》は,次の手順で評価する。
a) 評価対象の《大域変数識別子》を,Nとする。
b) 名前がNである束縛が 大域変数束縛集合 内に存在する場合,《大域変数識別子》の値はその束縛の値
とする。ただし,その束縛が,実行環境の初期化時に処理系が追加した束縛(7.2参照)である場合,
その動作は未規定とする。
c) そうではない場合,《大域変数識別子》の値はnilとする。
11.5.4.5 クラス変数
《クラス変数識別子》は,次の手順で評価する。
a) を《クラス変数識別子》とする。 クラスモジュールリストの一番上のリスト内の,特異クラスでな
い最初のクラス又はモジュールを,Cとする。
b) とその全てのスーパークラスとを含む集合を,CSとする。CSのそれぞれの要素のインクルードモ
ジュールリストについて,そこに含まれるモジュールを全て合わせた集合を,MSとする。CS及び
MSの和集合を,CMとする。
――――― [JIS X 3017 pdf 90] ―――――
次のページ PDF 91
JIS X 3017:2013の引用国際規格 ISO 一覧
- ISO/IEC 30170:2012(IDT)
JIS X 3017:2013の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語