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

50
X 3017 : 2013 (ISO/IEC 30170 : 2012)
注記 例えば,“x-y” は,“x(-y)” と同じとみなされる。“x-y” 及び “x-y” は,“x()-
y” とみなされる。ここで,“”は空白を表す。
意味規則
《メソッド実引数》の値は,実引数リスト及び《ブロック》の二つとし,メソッド呼出し時にそれらの値を
使用する。ただし,評価手順によっては《ブロック》を値としてもたないこともある。
《メソッド実引数》は次の手順で評価する。
a) 《添字実引数リスト》は,次の手順で評価する。
1) 空の実引数リストLを作成する。
2) プログラムテキストに現れる順に,《コマンド》,《演算子式リスト》の《演算子式》又は《連想リスト》
を評価し,評価結果の値をLの末尾に追加する。
3) 《散開実引数》が存在する場合,それを評価し,評価結果の実引数リストをLの末尾に連結する。
4) を《添字実引数リスト》の値の実引数リストとする。
b) 《散開実引数》は,次の手順で評価する。
1) 空の実引数リストLを作成する。
2) 《演算子式》を評価する。評価結果の値をVとする。
3) がArrayクラスのインスタンスでない場合の動作は未規定とする。
4) のそれぞれの要素を,添字順に,Lの末尾に追加する。
5) を《散開実引数》の値の実引数リストとする。
c) 《括弧付き実引数》は,次の手順で評価する。
1) 空の実引数リストLを作成する。
2) 《実引数リスト》が存在する場合,それを手順e)のとおり評価し,その評価結果の実引数リストをL
の末尾に連結する。《実引数リスト》の《ブロック実引数》が存在する場合,《実引数リスト》の値の《ブ
ロック》を,《括弧付き実引数》の値の《ブロック》とする。
3) 《演算子式リスト》が存在する場合,《演算子式リスト》のそれぞれの《演算子式》に対し,それらがプ
ログラムテキストに現れる順に,次の手順を実行する。
i) 《演算子式》を評価する。評価結果の値をVとする。
ii) を,Lの末尾に追加する。
4) 《doブロック付き連鎖コマンド》が存在する場合,それを評価する。評価結果の値をLの末尾に追加
する。
5) を《括弧付き実引数》の値の実引数リストとする。
d) 《括弧なし実引数》は,次の手順で評価する。
1) 《括弧なし実引数》の最初の文字が “(” である場合,動作は未規定とする。
2) 《実引数リスト》を,手順e)のとおり評価する。
3) を処理結果のリストとする。
e) 《実引数リスト》は,次の手順で評価する。
1) 空の実引数リストLを作成する。
2) 《コマンド》が存在する場合,それを評価する。評価結果の値をLの末尾に追加する。
3) 《演算子式リスト》が存在する場合,《演算子式リスト》のそれぞれの《演算子式》に対し,それらがプ
ログラムテキストに現れる順に,次のとおり処理する。
i) 《演算子式》を評価する。評価結果の値をVとする。

――――― [JIS X 3017 pdf 56] ―――――

                                                                                             51
X 3017 : 2013 (ISO/IEC 30170 : 2012)
ii) を,Lの末尾に追加する。
4) 《連想リスト》が存在する場合,それを評価する。評価結果の値をLの末尾に追加する。
5) 《散開実引数》が存在する場合,それを基に実引数リストを作成し,その実引数リストをLの末尾に
連結する。
6) 《ブロック実引数》が存在する場合,次の手順を行う。
i) 《ブロック実引数》の《演算子式》を評価する。評価結果の値をPとする。
ii) がProcクラスのインスタンスでない場合,動作は未規定とする。
iii) がProcクラスのインスタンスである場合,Pが表す《ブロック》を,《ブロック実引数》の値の《ブ
ロック》とする。
7) を《実引数リスト》の値の実引数リストとする。

11.3.3 ブロック

構文規則
《ブロック》 ::
《波括弧ブロック》
|《doブロック》
《波括弧ブロック》 ::
[《行終端子》禁止] “[{” 《ブロック仮引数》・ 《ブロック本体》 “}]”
《doブロック》 ::
[《行終端子》禁止] “do” 《ブロック仮引数》・ 《ブロック本体》 “end”
《ブロック仮引数》 ::
“|” “|”
|“||”
|“|” 《ブロック仮引数リスト》 “|”
《ブロック仮引数リスト》 ::
《左辺》
|《多重代入左辺》
《ブロック本体》 ::
《複合文》
《ブロック仮引数リスト》の中に存在する,《左辺》(11.4.2.4参照)が,次のいずれかの形式であることが
許可されるか否かは,処理系定義とする。
− 《定数識別子》
− 《大域変数識別子》
− 《インスタンス変数識別子》
− 《クラス変数識別子》
− 《一次式》 “[” 《添字実引数リスト》・ “]”
− 《一次式》 ( “.”|“::” ) ( 《局所変数識別子》 | 《定数識別子》 )
− “::” 《定数識別子》
注記 既存の処理系の中には《ブロック仮引数》内に《定数識別子》などのプログラム構成要素を許すも
のがあるため,これらのプログラム構成要素が許されるかは処理系定義としている。今後の実

――――― [JIS X 3017 pdf 57] ―――――

52
X 3017 : 2013 (ISO/IEC 30170 : 2012)
装では,これらのプログラム構成要素を許さないようにするのが望ましい。
《ブロック仮引数リスト》の《多重代入左辺》の《グループ化された左辺》(11.4.2.4参照)が,次の形式であ
ることが許可されるか否かは,処理系定義とする。
− “(” ( 《多重代入左辺項目》 “,” )+ “)”
意味規則
《ブロック》は,メソッド呼出しに渡される手続きである。
《ブロック》は,《yield式》(11.3.5参照)によって呼び出すことができる。その呼出しを《ブロック》呼出
しという。また,Procクラスに対して,その《ブロック》を渡してnewメソッドを呼び出すことによって
生成されたProcクラスのインスタンスに対して,callメソッド(15.2.17.4.3参照)を呼び出すことによ
っても,呼び出すことができる。
《ブロック》呼出しには,実引数を与えることができる。《ブロック》が《yield式》によって呼び出された場
合は,《yield式》に与えられた実引数が,《ブロック》呼出しの実引数となる。《ブロック》がcallメソッド
の呼出しによって呼び出された場合は,callメソッドの呼出しに与えられた実引数が,《ブロック》呼出
しの実引数となる。
《ブロック》は,それが渡されたメソッド呼出しの直前の実行環境の下で評価される。ただし,《ブロック》
局所変数束縛集合
が,メソッド呼出しに渡された後に, 内の変数束縛に変更を加えた場合,実行環境に
も影響が及ぶ。この(影響を受けている可能性のある)実行環境をEbとする。
《ブロック》が呼び出された際に,その《ブロック》は次の手順で評価する。
a) 現在の実行環境をEoとする。《ブロック》に与えられた実引数のリストをLとする。
b) 実行環境をEbに変更する。
c) 空の局所変数束縛の集合を 局所変数束縛集合 に積む。
d) 《doブロック》又は《波括弧ブロック》内に《ブロック仮引数リスト》が存在する場合,次の処理を行う。
1) 《ブロック仮引数リスト》が《左辺》又は《グループ化された左辺》のいずれかの形式である場合は,次
の手順を行う。
i) Lの長さが0である場合,nilをXとする。
ii) の長さが1である場合,Lの唯一の要素をXとする。
iii) の長さが1より大きい場合,この手順の結果は未規定とする。
iv) 《ブロック仮引数リスト》が《左辺》という形式である場合,《単一変数代入式》(11.4.2.2.2参照)E
を評価する。ここで,Eの《変数》は《左辺》であり,Eの《演算子式》の値はXとする。
v) 《ブロック仮引数リスト》が《グループ化された左辺》という形式である場合,《多対多代入文》
(11.4.2.4参照)Eを評価する。ここで,Eの《多重代入左辺》は《グループ化された左辺》であり,
Eの《括弧なしメソッド呼出し》又は《演算子式》の値はXとする。
2) 《ブロック仮引数リスト》が《多重代入左辺》という形式であり,《多重代入左辺》が《グループ化された
左辺》ではない場合は,次の手順を行う。
i) Lの長さが1の場合,次の手順を行う。
I) の唯一の要素がArrayクラスのインスタンスでない場合は,この手順の結果は未規定とする。
II) の要素を,同じ順序で含む実引数リストYを作る。
ii) の長さが0であるか,1より大きい場合は,LをYとする。
iii) 《多対多代入文》Eを,11.4.2.4で規定するとおりに評価する。ここで,Eの《多重代入左辺》は《ブ
ロック仮引数リスト》であり,Eの《多重代入右辺》から作られる実引数リストはYとする。

――――― [JIS X 3017 pdf 58] ―――――

                                                                                             53
X 3017 : 2013 (ISO/IEC 30170 : 2012)
e) 《ブロック本体》を評価する。
1) 《ブロック本体》の評価が《break式》によって終了した場合は,次の手順を行う。
i) 《ブロック》が呼び出された時点で,《ブロック》が渡されたメソッド呼出しが既に終了していた場
合は,次の手順を行う。
I) 名前が “break” であるSymbolクラスのインスタンスを,Sとする。
II) 《break式》の《ジャンプ実引数》が存在した場合,その《ジャンプ実引数》の値をVとする。それ
以外の場合は,nilをVとする。
III) 名前が “@reason” であって値がSであるインスタンス変数束縛と,名前が “@exitvalue”
であって値がVであるインスタンス変数束縛とをもつLocalJumpErrorクラスの直接のイン
スタンスを例外として発生させる。
ii) それ以外の場合は,実行環境をEoに復元し,現在のメソッド呼出しの13.3.3 i)の手順を終了し,
13.3.3 j)の手順を実行する。
《break式》の《ジャンプ実引数》が存在した場合,現在のメソッド呼出しの値はその《ジャンプ実引数》
の値とする。それ以外の場合は,現在のメソッド呼出しの値はnilとする。
2) 《ブロック本体》の評価が《redo式》によって終了された場合は,手順e)を再び実行する。
3) 《ブロック本体》の評価が《next式》によって終了された場合は,次の手順を行う。
i) 《next式》の《ジャンプ実引数》が存在した場合,その《ジャンプ実引数》の値をVとする。
ii) そうではない場合,nilをVとする。
局所変数束縛集合
4) 《ブロック本体》の評価が《return式》によって終了された場合は, の一番上の値を
取り除く。
5) それ以外によって終了された場合は,《ブロック本体》の評価結果の値をVとする。
f) 手順e) が《return式》によって終了された場合を除き,実行環境をEoに復元する。
g) 《doブロック》又は《波括弧ブロック》の呼出しの評価結果は,Vとする。

11.3.4 super式

構文規則
《super式》 ::=
《省略可能実引数付きsuper》
|《実引数付きsuper》
|《実引数・doブロック付きsuper》
《省略可能実引数付きsuper》 ::
“super” ( [《行終端子》禁止] [《空白類》禁止] 《括弧付き実引数》 )・ 《ブロック》・
《実引数付きsuper》 ::
“super” 《括弧なし実引数》
《実引数・doブロック付きsuper》 ::
“super” 《括弧なし実引数》 《doブロック》
《実引数・doブロック付きsuper》の《括弧なし実引数》の《実引数リスト》(11.3.2参照)に,《ブロック実
引数》が存在してはならない。
意味規則
《super式》は,次の手順で評価する。

――――― [JIS X 3017 pdf 59] ―――――

54
X 3017 : 2013 (ISO/IEC 30170 : 2012)
a) 現在のselfが《特異クラス定義》(13.4.2参照)によって積まれた場合,又は次のいずれかのメソッド
の呼出しによって積まれた場合は,動作は未規定とする。
− Moduleクラスのclassevalメソッド(15.2.2.4.15参照)
− Moduleクラスのmoduleevalメソッド(15.2.2.4.35参照)
− Kernelクラスのinstanceevalメソッド(15.3.1.3.18参照)
b) を空のリストとする。Bを ブロック の一番上の要素とする。
1) 《super式》が《省略可能実引数付きsuper》であり,《括弧付き実引数》及び《ブロック》のいずれも存在
しない場合は,次のとおり実引数のリストを作成する。
i) Mを現在のメソッド呼出しに対応するメソッドとする。Mの《メソッド仮引数部》の《仮引数リス
局所変数束縛集合
ト》を,Lとする。現在のメソッド呼出しに対応する 内の局所変数束縛の集合
を,Sとする。
ii) 《必須仮引数リスト》がL内に存在した場合,それぞれの《必須仮引数》pに対し,次の手順を行う。
I) 内の名前がpである束縛の値を,vとする。
II) をAの末尾に追加する。
iii) 《省略可能仮引数リスト》がL内に存在した場合,それぞれの《省略可能仮引数》pに対し,次の手
順を行う。
I) の《省略可能仮引数名》を,nとする。
II) 内の名前がnである束縛の値を,vとする。
III) をAの末尾に追加する。
iv) 《配列仮引数》がL内に存在した場合,次の手順を行う。
I) 《配列仮引数》の《配列仮引数名》を,nとする。
II) 内の名前がnである束縛の値を,vとする。vのそれぞれの要素に対し,添字順に,Aの末尾
に追加する。
2) 《super式》が《省略可能実引数付きsuper》であり,《括弧付き実引数》若しくは《ブロック》のいずれか,
又は両方が存在する場合は,次の手順を実行する。
i) 《括弧付き実引数》が存在する場合,11.3.2で規定するとおりに,実引数のリスト及び《ブロック》
を作成する。作成されたリストをAとし,作成された《ブロック》(もしあれば)をBとする。
ii) 《ブロック》が存在する場合,その《ブロック》をBとする。
3) 《super式》が《実引数付きsuper》の場合,11.3.2で規定するとおりに,《括弧なし実引数》から実引数の
リストを作成する。作成したリストをAとする。《括弧なし実引数》の《実引数リスト》の《ブロック
実引数》が存在する場合,《ブロック実引数》から作成された《ブロック》をBとする。
4) 《super式》が《実引数・doブロック付きsuper》の場合,11.3.2で規定するとおりに,《括弧なし実引数》
から実引数のリストを作成する。作成されたリストをAとする。《doブロック》をBとする。
c) 呼び出すメソッドを,次の手順によって決定する。
1) を現在のクラス又はモジュールとする。Nを 定義時メソッド名 の一番上の要素とする。
2) がClassクラスのインスタンスである場合,次の手順を行う。
i) 名前がNであるメソッド束縛の探索を,13.3.4の手順b)のとおりに行う。ここで,13.3.4のCは
上記のCとする。
ii) 束縛が見つかり,その値がundef でない場合(13.1.1参照),Vをその束縛の値とする。
iii) そうではない場合,次の手順を行う。

――――― [JIS X 3017 pdf 60] ―――――

次のページ PDF 61

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

  • ISO/IEC 30170:2012(IDT)

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