JIS X 3017:2013 プログラム言語Ruby | ページ 20

90
X 3017 : 2013 (ISO/IEC 30170 : 2012)

12.6 until修飾文

構文規則
《until修飾文》 ::
《文》 [《行終端子》禁止] “until” 《式》
意味規則
S “until” Eという形式の《until修飾文》(Sは《文》,Eは《式》とする。)は,次の手順で評価する。
a) が《begin式》の場合,動作は処理系定義とする。
b) “until” E “do” S “end” という形式の《until式》を評価する。
c) 評価結果の値を,《until修飾文》の値とする。

12.7 rescue修飾文

構文規則
《rescue修飾文》 ::
《rescue修飾文の主文》 [《行終端子》禁止] “rescue” 《rescue修飾文の後退文》
《rescue修飾文の主文》 ::
《文》
《rescue修飾文の後退文》 ::
《文》 − 《後退文不許可文》
《後退文不許可文》 ::
《キーワードAND式》
|《キーワードOR式》
|《if修飾文》
|《unless修飾文》
|《while修飾文》
|《until修飾文》
|《rescue修飾文》
意味規則
《rescue修飾文》は,次の手順で評価する。
a) 《rescue修飾文の主文》を評価する。評価結果の値をVとする。
b) 手順a)の評価中にStandardErrorクラスの直接のインスタンスが例外として発生したが,処理され
なかった場合,《rescue修飾文の後退文》を評価し,その評価結果の値を《rescue修飾文》の値とする。
c) 手順a)の評価中に例外が発生しなかった場合,又は発生した全ての例外が手順a)で処理された場合,
Vを《rescue修飾文》の値とする。

13 クラス及びモジュール

13.1 モジュール

13.1.1 概要

  全てのモジュールは,Moduleクラスのインスタンスである(15.2.2参照)。ただし,Moduleクラスは,
Classクラスのスーパークラスの一つであるため,Moduleクラスの全てのインスタンスがモジュールで
あるわけではない。Classクラスのインスタンスは,モジュールではなくクラスである。

――――― [JIS X 3017 pdf 96] ―――――

                                                                                             91
X 3017 : 2013 (ISO/IEC 30170 : 2012)
モジュールは,次の属性をもつ。
インクルードモジュールリスト : モジュールにインクルードされているモジュールのリストである。モ
ジュールのインクルードについては,13.1.3に示す。
定数 : 定数束縛の集合である。定数束縛は,次のプログラム構成要素によって作成される。
− 《代入》(11.4.2参照)
− 《モジュール定義》(13.1.2参照)
− 《クラス定義》(13.2.2参照)
クラス変数 : クラス変数束縛の集合である。クラス変数束縛は,《代入》(11.4.2参照)によって作成さ
れる。
インスタンスメソッド : メソッド束縛の集合である。メソッド束縛は,《メソッド定義》(13.3.1参照),
《特異メソッド定義》(13.4.3参照),《alias文》(13.3.6参照)又は《undef文》(13.3.7参照)によって
作成される。この束縛の値は,undefの場合もある。undefは,メソッドが呼出し不可能であること
を意味する(13.3.7参照)。

13.1.2 モジュール定義

構文規則
《モジュール定義》 ::
“module” 《モジュールパス》 《モジュール本体》 “end”
《モジュールパス》 ::
《最上位モジュールパス》
|《モジュール名》
|《入れ子モジュールパス》
《モジュール名》 ::
《定数識別子》
《最上位モジュールパス》 ::
“::” 《モジュール名》
《入れ子モジュールパス》 ::
《一次式》 [《行終端子》禁止] “::” 《モジュール名》
《モジュール本体》 ::
《本体文》
意味規則
《モジュール定義》は,次の手順で評価する。
a) 名前が《モジュール名》である定数束縛を作成又は更新するクラス又はモジュールCを,次のように決
定する。
1) 《モジュールパス》が《最上位モジュールパス》という形式の場合,CをObjectクラスとする。
2) 《モジュールパス》が《モジュール名》という形式の場合,Cを現在のクラス又はモジュールとする。
3) 《モジュールパス》が《入れ子モジュールパス》という形式の場合,その《一次式》を評価する。評価結
果がModuleクラスのインスタンスの場合,そのインスタンスをCとする。そうではない場合,
TypeErrorクラスの直接のインスタンスを例外として発生させる。
b) を《モジュール名》とする。

――――― [JIS X 3017 pdf 97] ―――――

92
X 3017 : 2013 (ISO/IEC 30170 : 2012)
1) 名前がNである束縛が,Cの定数束縛の集合内に存在する場合,Bをその束縛とする。Bの値がモ
ジュールである場合,そのモジュールをMとする。そうではない場合,TypeErrorクラスの直接
のインスタンスを例外として発生させる。
2) それ以外の場合,Moduleクラスの直接のインスタンスMを作成する。名前がNで,値がMであ
る変数束縛を作成し,それをCの定数束縛の集合に追加する。
c) 実行環境を,次の手順を行うことで変更する。
1) クラスモジュールリストの一番上のリストと同じ内容をもつリストを作成し,そのリストの先頭
にMを追加する。そのリストを クラスモジュールリスト に積む。
2) を self に積む。
3) 可視性publicを 省略時可視性 に積む。
4) 空の束縛の集合を 局所変数束縛集合 に積む。
d) 《モジュール本体》の《本体文》(11.5.2.5参照)を評価する。《本体文》の評価結果を《モジュール定義》
の値とする。
e) ,
クラスモジュールリストself , 省略時可視性 及び 局所変数束縛集合 の一番上の要素を取り除
くことによって,実行環境を復元する。

13.1.3 モジュールのインクルード

  モジュール及びクラスは,他のモジュールをインクルードすることによって拡張することができる。
インクルードされたモジュールのインスタンスメソッド(13.3.1参照),クラス変数(11.5.4.5参照)及
び定数(11.5.4.2参照)は,そのモジュールをインクルードしたモジュール又はクラスで利用できる。
モジュールのインクルードは,メソッドinclude又はメソッドextendを実行することによって行う
(15.2.2.4.27及び15.3.1.3.13参照)。
モジュールMが別のモジュールNにインクルードされているのは,MがNのインクルードモジュール
リストの要素である場合に限る。モジュールMがクラスCにインクルードされているのは,MがCのイ
ンクルードモジュールリストの要素であるか,MがCのいずれかのスーパークラスによってインクルード
されている場合に限る。

13.2 クラス

13.2.1 概要

  全てのクラスは,Classクラスのインスタンスである。Classクラスは,Moduleクラスの直接のサブ
クラスである(15.2.3参照)。
クラスはモジュールと同じ属性をもつ。それに加えて,それぞれのクラスは高々一つの直接のスーパー
クラスをもつ。

――――― [JIS X 3017 pdf 98] ―――――

                                                                                             93
X 3017 : 2013 (ISO/IEC 30170 : 2012)

13.2.2 クラス定義

構文規則
《クラス定義》 ::
“class” 《クラスパス》 [《行終端子》禁止] ( “<” 《スーパークラス》 )・ 《分離子》
《クラス本体》 “end”
《クラスパス》 ::
《最上位クラスパス》
|《クラス名》
|《入れ子クラスパス》
《クラス名》 ::
《定数識別子》
《最上位クラスパス》 ::
“::” 《クラス名》
《入れ子クラスパス》 ::
《一次式》 [《行終端子》禁止] “::” 《クラス名》
《スーパークラス》 ::
《式》
《クラス本体》 ::
《本体文》
意味規則
《クラス定義》は,次の手順で評価する。
a) 名前が《クラス名》である定数束縛を作成又は更新するクラス又はモジュールMを,次の手順を行うこ
とで決定する。
1) 《クラスパス》が《最上位クラスパス》という形式の場合,MをObjectクラスとする。
2) 《クラスパス》が《クラス名》という形式の場合,Mを現在のクラス又はモジュールとする。
3) 《クラスパス》が《入れ子クラスパス》という形式の場合,その《一次式》を評価する。評価結果が
Moduleクラスのインスタンスの場合,そのインスタンスをMとする。そうではない場合,
TypeErrorクラスの直接のインスタンスを例外として発生させる。
b) を《クラス名》とする。
1) 名前がNである束縛がMの定数束縛の集合内に存在する場合,Bをその束縛とする。
i) Bの値がClassクラスのインスタンスの場合,そのインスタンスをCとする。そうではない場合,
TypeErrorクラスの直接のインスタンスを例外として発生させる。
ii) 《スーパークラス》が存在する場合,それを評価する。評価結果の値がCの直接のスーパークラス
と一致しない場合,TypeErrorクラスの直接のインスタンスを例外として発生させる。
2) そうではない場合,Classクラスの直接のインスタンスを作成する。そのクラスをCとする。
i) 《スーパークラス》が存在する場合,それを評価する。評価結果がClassクラスのインスタンスで
ない場合,TypeErrorクラスの直接のインスタンスを例外として発生させる。《スーパークラス》
の値が特異クラス又はClassクラスである場合の動作は未規定とする。そうではない場合,《ス
ーパークラス》の値をCの直接のスーパークラスとする。

――――― [JIS X 3017 pdf 99] ―――――

94
X 3017 : 2013 (ISO/IEC 30170 : 2012)
ii) 《クラス定義》が《スーパークラス》をもたない場合,ObjectクラスをCの直接のスーパークラス
とする。
iii) 特異クラスを作り,Cと関連付ける。この特異クラスは,スーパークラスの一つとして,Cの直
接のスーパークラスの特異クラスをもたなければならない。
iv) 名前がNで,値がCである変数束縛を作成し,それをMの定数束縛の集合に追加する。
c) 実行環境を,次の手順を行うことで変更する。
1) クラスモジュールリストの一番上のリストと同じ内容をもつリストを作成し,そのリストの先頭
にCを追加する。そのリストを クラスモジュールリストに積む。
2) を self に積む。
3) ublic可視性を 省略時可視性 に積む。
4) 空の束縛の集合を 局所変数束縛集合 に積む。
d) 《クラス本体》の《本体文》(11.5.2.5参照)を評価する。《本体文》の評価結果を《クラス定義》の値とする。
e) ,
クラスモジュールリストself , 省略時可視性 及び 局所変数束縛集合 の一番上の要素を取り除
くことで,実行環境を復元する。

13.2.3 継承

  クラスは,そのスーパークラスから属性を継承する。これは,クラスがそのスーパークラスの属性を,
次のように暗黙のうちに含んでいるとみなせる。
− スーパークラスの定数及びクラス変数を参照できる(11.5.4.2及び11.5.4.5参照)。
− スーパークラスの特異メソッドを呼び出すことができる(13.4参照)。
− スーパークラスに定義されているインスタンスメソッドは,そのサブクラスのインスタンスに対して
呼び出すことができる(13.3.1参照)。

13.2.4 インスタンス生成

  クラスの直接のインスタンスは,クラスに対しnewメソッド(15.2.3.3.3参照)を呼び出すことで生成
される。

13.3 メソッド

13.3.1 メソッド定義

構文規則
《メソッド定義》 ::
“def” 《メソッド定義名》 [《行終端子》禁止] 《メソッド仮引数部》
《メソッド本体》 “end”
《メソッド定義名》 ::
《メソッド名》
|《代入風メソッド識別子》
《メソッド本体》 ::
《本体文》
次のプログラム構成要素は,《メソッド仮引数部》又は《メソッド本体》内に存在してはならない。
− 《クラス定義》
− 《モジュール定義》
− 《変数》が《定数識別子》であるような《単一変数代入》

――――― [JIS X 3017 pdf 100] ―――――

次のページ PDF 101

JIS X 3017:2013の引用国際規格 ISO 一覧

  • ISO/IEC 30170:2012(IDT)

JIS X 3017:2013の国際規格 ICS 分類一覧