この規格ページの目次
100
X 3017 : 2013 (ISO/IEC 30170 : 2012)
− メソッドの束縛が存在するModuleクラスのインスタンスを,Mとする。
現在のselfがMをインクルードしている場合,Mが現在のselfのクラスである場合,又はMが現
在のselfのクラスのスーパークラスの一つである場合。
Mが特異クラスの場合,あるprotectedメソッドが呼出し可能かどうかは,処理系定義の方法で決定する。
13.3.5.5 可視性の変更
メソッドの可視性は,Moduleクラスに定義されている組込みメソッドpublic(15.2.2.4.38参照),
private(15.2.2.4.36参照)及びprotected(15.2.2.4.37参照)によって変更される。
13.3.6 alias文
構文規則
《alias文》 ::
“alias” 《新しい名前》 《別名付与対象名》
《新しい名前》 ::
《メソッド定義名》
|《シンボル》
《別名付与対象名》 ::
《メソッド定義名》
|《シンボル》
意味規則
《alias文》は,次の手順で評価する。
a) 《新しい名前》を,次の手順で評価する。
1) 《新しい名前》が《メソッド定義名》の場合,《メソッド定義名》をNとする。
2) 《新しい名前》が《シンボル》の場合,《シンボル》を評価する。その評価結果であるSymbolクラスの
インスタンスの名前をNとする。
b) 《別名付与対象名》を次の手順で評価する。
1) 《別名付与対象名》が《メソッド定義名》の場合,《メソッド定義名》をAとする。
2) 《別名付与対象名》が《シンボル》の場合,《シンボル》を評価する。その評価結果であるSymbolクラ
スのインスタンスの名前をAとする。
c) を現在のクラス又はモジュールとする。
d) を起点として,名前がAであるメソッド束縛を13.3.4で規定するように探索する。
e) 束縛が見つかり,かつ,その値がundefでない場合,Vを見つかった束縛の値とする。
f) そうではない場合,Sを名前がAであるSymbolクラスの直接のインスタンスとし,Sを名前属性に
もつNameErrorクラスの直接のインスタンスを例外として発生させる。
g) 名前がNであるメソッド束縛が,現在のクラス又はモジュールのインスタンスメソッド束縛の集合内
に存在する場合,その束縛の値をVで置き換える。
h) そうではない場合,名前がNで,値がVであるメソッド束縛を作成し,それを現在のクラス又はモジ
ュールのインスタンスメソッド束縛の集合に追加する。
i) 《alias文》の値はnilである。
――――― [JIS X 3017 pdf 106] ―――――
101
X 3017 : 2013 (ISO/IEC 30170 : 2012)
13.3.7 undef文
構文規則
《undef文》 ::
“undef” 《undefリスト》
《undefリスト》 ::
《メソッド名・記号》 ( “,” 《メソッド名・記号》 )*
《メソッド名・記号》 ::
《メソッド定義名》
|《シンボル》
意味規則
《undef文》は,次の手順で評価する。
a) 《undefリスト》のそれぞれの《メソッド名・記号》について,次の処理を行う。
1) を現在のクラス又はモジュールとする。
2) 《メソッド名・記号》が《メソッド定義名》の場合,《メソッド定義名》をNとする。そうではない場合,
《シンボル》を評価する。その評価結果であるSymbolクラスのインスタンスの名前を,Nとする。
3) 名前がNであるメソッド束縛を,Cを起点として13.3.4で規定するように探索する。
4) 束縛が見つかり,かつ,その値がundefでない場合は,次の手順を行う。
i) 束縛がC内に見つかった場合,その束縛の値をundefに置き換える。
ii) そうではない場合,名前がNで,値がundefであるメソッド束縛を作成し,それをCのインスタ
ンスメソッド束縛の集合に追加する。
5) そうではない場合,Sを名前がNであるSymbolクラスの直接のインスタンスとし,Sを名前属性
にもつNameErrorクラスの直接のインスタンスを例外として発生させる。
b) 《undef文》の値はnilとする。
13.4 特異クラス
13.4.1 概要
特異クラスは,他のオブジェクトと関連付けられた特別なクラスである。特異クラスは,関連付けられ
たオブジェクトの動作を変更する。特異クラスCがオブジェクトOと関連付けられているとき,CはO
の特異クラスであるという。また,OはCの第1関連オブジェクトであるという。
一つのオブジェクトは,高々一つの特異クラスしかもたない。オブジェクトは,生成された時点では特
異クラスと関連付けられていてはならない。ただし,Classクラスのインスタンスは除く。特異クラスは,
《特異メソッド定義》,《特異クラス定義》などのプログラム構成要素を評価することで作られる。ただし,
Classクラスのインスタンスが作られたときは,そのインスタンスは既に特異クラスと関連付けられてい
なければならない。
通常,特異クラスはその第1関連オブジェクトだけに関連付けられなければならない。しかし,Class
クラスのインスタンスの特異クラスは,幾つかのClassクラスのインスタンス(これらはある特異クラス
の第1関連オブジェクトであってはならない。)と,処理系定義のやり方によって,追加で関連付けられて
もよい。特異クラスとその第1関連オブジェクトとがひとたび関連付けられた場合,その関連付けが削除
されることはあってはならない。しかし,前述の追加で関連付けられたClassクラスのインスタンスが別
の特異クラスの第1関連オブジェクトになった場合は,Classクラスのインスタンスとその特異クラスと
――――― [JIS X 3017 pdf 107] ―――――
102
X 3017 : 2013 (ISO/IEC 30170 : 2012)
の関連付けは削除される[13.4.2 e)及び13.4.3 e)参照]。
全ての特異クラスはClassクラスのインスタンスであり(15.2.3参照),クラスがもつのと同じ属性の
集合をもつ。
特異クラスの直接のスーパークラスは,処理系定義とする。ただし,特異クラスは,それが関連付けら
れているオブジェクトのクラスのサブクラスでなければならない。
注記1 例えば,ObjectクラスはClassクラスの直接のインスタンスであるので,Objectクラス
の特異クラスはClassクラスのサブクラスである。それゆえ,Classクラスのインスタン
スメソッドはObjectクラスに対して呼び出すことができる。
直接のスーパークラスをもつクラスの特異クラスは,次の条件を満たさなければならない。
− EcをクラスCの特異クラス,SをCの直接のスーパークラス,EsをSの特異クラスとする。このとき,
Ecは,Esをスーパークラスの一つとしてもつ。
注記2 この条件によって,クラスは,そのスーパークラスから特異メソッドを継承することができ
る。例えば,Fileクラスの特異クラスはIOクラスの特異クラスをスーパークラスにもつ。
それによって,FileクラスはIOクラスの特異メソッドopenを継承する。
特異クラスはClassクラスのインスタンスであるが,それ自身のインスタンスを生成できない。特異ク
ラスに対してnewメソッドが呼び出された場合は,TypeErrorクラスの直接のインスタンスが例外とし
て発生されなければならない[15.2.3.3.3 a)参照]。
特異クラスがクラスのスーパークラスになれるかどうかは,未規定とする[13.2.2 b) 2) )及び15.2.3.3.1 c)
参照]。
特異クラスがクラス変数の集合をもつかどうかは,処理系定義とする。
13.4.2 特異クラス定義
構文規則
《特異クラス定義》 ::
“class”“<<” 《式》 《分離子》 《特異クラス本体》 “end”
《特異クラス本体》 ::
《本体文》
意味規則
《特異クラス定義》は,次の手順で評価する。
a) 《式》を評価する。評価結果の値をOとする。OがIntegerクラスのインスタンス又はSymbolクラ
スのインスタンスの場合,TypeErrorクラスの直接のインスタンスを例外として発生させてもよい。
b) がnil,true,又はfalseのいずれかの場合,EをOのクラスとし,手順f)に進む。
c) が特異クラスに関連付けられていない場合,新たな特異クラスを作成する。その特異クラスをEと
し,Oを第1関連オブジェクトとしてEと関連付ける。
d) が第1関連オブジェクトとして特異クラスと関連付けられている場合,その特異クラスをEとする。
e) が第1関連オブジェクトとしてではなく特異クラスと関連付けられていた場合は,Oと特異クラス
との関連付けを削除し,新たな特異クラスを作成する。新しく作成した特異クラスをEとし,Oを第
1関連オブジェクトとしてEと関連付ける。
f) 実行環境を,次のとおり変更する。
1) クラスモジュールリストの一番上のリストと同じ内容をもつリストを作成し,そのリストの先頭
――――― [JIS X 3017 pdf 108] ―――――
103
X 3017 : 2013 (ISO/IEC 30170 : 2012)
にEを追加する。そのリストを クラスモジュールリスト に積む。
2) を self に積む。
3) 可視性publicを 省略時可視性 に積む。
4) 空の束縛の集合を 局所変数束縛集合 に積む。
g) 《特異クラス本体》を評価する。《特異クラス本体》の評価結果を《特異クラス定義》の値とする。
h) ,
クラスモジュールリストself , 省略時可視性 及び 局所変数束縛集合 の一番上の要素を取り除
くことによって,実行環境を復元する。
13.4.3 特異メソッド定義
構文規則
《特異メソッド定義》 ::
“def” 《特異オブジェクト》 ( “.”|“::”) 《メソッド定義名》 [《行終端子》禁止]
《メソッド仮引数部》 《メソッド本体》 “end”
《特異オブジェクト》 ::
《変数参照》
|“(” 《式》 “)”
意味規則
《特異メソッド定義》は次の手順で評価する。
a) 《特異オブジェクト》を評価する。評価結果の値をSとする。SがNumericクラスのインスタンス又は
Symbolクラスのインスタンスの場合,TypeErrorクラスの直接のインスタンスを例外として発生さ
せてもよい。
b) がnil,true,又はfalseのいずれかの場合,EをOのクラスとし,手順f)に進む。
c) が特異クラスに関連付けられていない場合,新たな特異クラスを作成する。その特異クラスをEと
し,Sを第1関連オブジェクトとしてEと関連付ける。
d) が第1関連オブジェクトとして特異クラスと関連付けられている場合,その特異クラスをEとする。
e) が第1関連オブジェクトとしてではなく特異クラスと関連付けられていた場合は,Sと特異クラスと
の関連付けを削除し,新たな特異クラスを作成する。新しく作成した特異クラスをEとし,Sを第1
関連オブジェクトとしてEと関連付ける。
f) を《メソッド定義名》とする。
g) 《特異メソッド定義》によって定義されるメソッドUを作成する。Uは,13.3.1で規定されるとおり,《特
異メソッド定義》の《メソッド仮引数部》及び《メソッド本体》をもつ。Uの属性を次のように初期化する。
− クラスモジュールリスト属性を, クラスモジュールリストの一番上の値とする。
− 定義名属性をNとする。
− 可視性属性を,publicとする。
h) 名前がNである束縛が,Eのインスタンスメソッド束縛の集合内に存在する場合,その束縛の値をV
とする。
1) がundefの場合,この《特異メソッド定義》の評価方法は処理系定義とする。
2) 束縛の値をUで置き換える。
i) そうではない場合,名前がNで,値がUであるメソッド束縛を作成し,それをEのインスタンスメソ
ッド束縛の集合に追加する。
――――― [JIS X 3017 pdf 109] ―――――
104
X 3017 : 2013 (ISO/IEC 30170 : 2012)
j) 《特異メソッド定義》の値は,処理系定義とする。
14 例外
14.1 概要
Exceptionクラスのインスタンスが例外として発生した場合,その時点の評価処理は停止し,この例
外を処理できるプログラム構成要素に制御が移る。
14.2 例外の発生要因
例外は,次のいずれかの場合に発生する。
− raiseメソッドが呼び出された場合(15.3.1.2.12参照)。
− この規格の様々な箇所で示されるような例外条件が発生した場合。
例外として発生させられるのはExceptionクラスのインスタンスだけである。
14.3 例外の処理
例外は,《本体文》,《rescue修飾子付き代入》又は《rescue修飾文》によって処理される。これらのプログ
ラム構成要素を,例外ハンドラと呼ぶ。例外ハンドラが例外を処理しているとき,その処理される例外を,
現在の例外と呼ぶ。
発生した例外は,例外ハンドラによって処理される。この例外ハンドラは,次のとおり決定する。
a) 例外が発生した地点を字句的に含み,かつ,《プログラム》,《メソッド定義》,《特異メソッド定義》又
は《ブロック》のいずれかに対応する局所変数のスコープのうち最内側のものをSとする。
b) の中にあって,例外が発生した地点を字句的に含む,全ての例外ハンドラについて,最内側から最
外側まで,次の調査を行う。
− 《rescue修飾子付き代入》は,発生した例外がStandardErrorクラスのインスタンスであるとき,
その例外を処理できると判断する(11.4.2.5参照)。ただし,例外がその《演算子式》2内で発生した場
合は,《rescue修飾子付き代入》はその例外を処理できると判断しない。
− 《rescue修飾文》は,発生した例外がStandardErrorクラスのインスタンスであるとき,その例外
を処理できると判断する(12.7参照)。ただし,その例外が,《rescue修飾文》の《rescue修飾文の後
退文》内で発生した場合は,《rescue修飾文》はその例外を処理できない。
− 《本体文》は,《本体文》の《rescue節》のいずれかがその例外を処理できるとき,例外を処理できると
判断する(11.5.2.5参照)。ただし,例外が《本体文》の《rescue節》の一つ,《else節》,又は《ensure節》
のいずれかの中で発生した場合は,《本体文》はその例外を処理できない。《本体文》中に《ensure節》
が存在する場合,その《ensure節》は,《本体文》が例外を処理できない場合であっても,評価が行わ
れる(11.5.2.5参照)。
c) 例外を処理できる例外ハンドラがS内に見つかった場合,例外ハンドラの探索を終了する。そして,
その例外ハンドラに関連するプログラム構成要素から,プログラムの評価を続ける[11.4.2.5 b),
11.5.2.5 d),及び12.7 b)参照]。
d) 例外を処理できる例外ハンドラがS内に見つからない場合,次の手順を行う。
1) が《メソッド定義》又は《特異メソッド定義》に対応する場合,13.3.3の手順h)又は手順i)を終了し,
現在のメソッド呼出しの手順j)を実行する(13.3.3参照)。そして,そのメソッドが呼び出された場
所でその例外が発生したものとして,手順a)から探索を続ける。
2) が《ブロック》に対応する場合,現在の《ブロック》の評価を終了し,11.3.3 f)を実行する。そして,
その《ブロック》が呼び出された場所でその例外が発生したものとして,手順a)から探索を続ける。
――――― [JIS X 3017 pdf 110] ―――――
次のページ PDF 111
JIS X 3017:2013の引用国際規格 ISO 一覧
- ISO/IEC 30170:2012(IDT)
JIS X 3017:2013の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語