この規格ページの目次
95
X 3017 : 2013 (ISO/IEC 30170 : 2012)
− 《スコープ付き定数代入》
− 次のいずれかの形式の《左辺》をその中にもつ《多重代入文》
− 《定数識別子》
− 《一次式》 [《行終端子》禁止] ( “.”|“::” ) ( 《局所変数識別子》|《定数識別子》 )
− “::” 《定数識別子》
ただし,《メソッド仮引数部》内又は《メソッド本体》内の《特異クラス定義》においては,これらの構成要
素が現れてもよい。
意味規則
メソッドは《メソッド定義》又は《特異メソッド定義》(13.4.3参照)によって定義される。メソッドは,
それを定義する《メソッド定義》又は《特異メソッド定義》の《メソッド仮引数部》及び《メソッド本体》をもつ。
《メソッド本体》は,そのメソッドが呼び出された際に評価される(13.3.3参照)。《メソッド本体》の評価は,
その《本体文》(11.5.2.5参照)の評価とする。また,メソッドは次の属性をもつ。
クラスモジュールリスト : メソッド定義時のクラスモジュールリスト の一番上の要素である。
定義名 : メソッド定義時に指定された名前である。
可視性 : メソッドの可視性である。
あるクラス又はモジュールは,それのスーパークラス又はそれにインクルードされているモジュールの
いずれかの中にあるメソッドの名前と同じ名前をもつ新しいメソッドを定義することができる。その場合,
その新しいメソッドは,そのスーパークラス又はインクルードされているモジュールのメソッドを上書き
するという。
《メソッド定義》は,次の手順で評価する。
a) を《メソッド名》とする。
b) この《メソッド定義》によって定義されるメソッドUを作成する。Uの属性を,次のように初期化する。
− クラスモジュールリスト属性を, クラスモジュールリストの一番上の値とする。
− 定義名属性をNとする。
− 可視性属性を次のように初期化する。
− 現在のクラス又はモジュールが特異クラスの場合,現在の可視性とする。
− そうではなく,Nが “initialize” 又は “initializecopy” の場合,privateとする。
− そうではない場合,現在の可視性とする。
c) 名前がNである束縛が,現在のクラス又はモジュールのインスタンスメソッド束縛の集合内に存在す
る場合,その束縛の値をVとする。
1) がundefの場合,この《メソッド定義》の評価方法は処理系定義とする。
2) 束縛の値VをUで置き換える。
d) そうではない場合,名前がNで,値がUであるメソッド束縛を作成し,それを現在のクラス又はモジ
ュールのインスタンスメソッド束縛の集合に追加する。
e) 《メソッド定義》の値は,処理系定義とする。
――――― [JIS X 3017 pdf 101] ―――――
96
X 3017 : 2013 (ISO/IEC 30170 : 2012)
13.3.2 メソッド仮引数
構文規則
《メソッド仮引数部》 ::
“(” 《仮引数リスト》・ “)”
|《仮引数リスト》・ 《分離子》
《仮引数リスト》 ::
《必須仮引数リスト》 ( “,” 《省略可能仮引数リスト》 )・
( “,” 《配列仮引数》 )・ ( “,” 《Proc仮引数》 )・
|《省略可能仮引数リスト》 ( “,” 《配列仮引数》 )・ ( “,” 《Proc仮引数》 )・
|《配列仮引数》 ( “,” 《Proc仮引数》 )・
|《Proc仮引数》
《必須仮引数リスト》 ::
《必須仮引数》
|《必須仮引数リスト》 “,” 《必須仮引数》
《必須仮引数》 ::
《局所変数識別子》
《省略可能仮引数リスト》 ::
《省略可能仮引数》
|《省略可能仮引数リスト》 “,” 《省略可能仮引数》
《省略可能仮引数》 ::
《省略可能仮引数名》 “=” 《省略値仮引数式》
《省略可能仮引数名》 ::
《局所変数識別子》
《省略値仮引数式》 ::
《演算子式》
《配列仮引数》 ::
“*” 《配列仮引数名》
|“*”
《配列仮引数名》 ::
《局所変数識別子》
《Proc仮引数》 ::
“&” 《Proc仮引数名》
《Proc仮引数名》 ::
《局所変数識別子》
《仮引数リスト》において,その《必須仮引数》,《省略可能仮引数名》,《配列仮引数名》及び《Proc仮引数
名》の,《局所変数識別子》は,全て異なる名前でなければならない。
意味規則
仮引数には,次に示す4種類がある。これらの仮引数が,実引数に束縛される仕組みについて,13.3.3
で規定する。
――――― [JIS X 3017 pdf 102] ―――――
97
X 3017 : 2013 (ISO/IEC 30170 : 2012)
必須仮引数 : 必須仮引数は,《必須仮引数》によって表される。それぞれの必須仮引数には,対応する実
引数がメソッド呼出し時に与えられなければならない。
省略可能仮引数 : 省略可能仮引数は,《省略可能仮引数》によって表される。それぞれの省略可能仮引数
は,《省略可能仮引数名》によって表される仮引数名と,《省略値仮引数式》によって表される式とか
ら構成される。省略可能仮引数に対応する実引数がメソッド呼出し時に与えられなかった場合,そ
の省略可能仮引数に対応する実引数の値として,《省略値仮引数式》の値が使用される。
配列仮引数 : 配列仮引数は,《配列仮引数名》によって表される。メソッド呼出し時に与えらえた《ブロッ
ク実引数》を除く実引数の個数をNとして,Nが必須仮引数の個数及び省略可能仮引数の個数の合
計より大きい場合,《ブロック実引数》以外の全ての超過した実引数を含むArrayクラスの直接のイ
ンスタンスが配列仮引数に束縛される。超過する実引数がない場合,配列仮引数にはArrayクラス
の空の直接のインスタンスが束縛される。《配列仮引数》が “*” という形式の場合,超過した実引数
は無視される。
Proc仮引数 : Proc仮引数は,《Proc仮引数名》によって表される。Proc仮引数には,メソッド呼出しに渡
されたブロックを表すProcクラスの直接のインスタンスが束縛される。
13.3.3 メソッド呼出し
実引数のリストの作成方法については,11.3で示す。
メソッド呼出しのレシーバをR,メソッド名をM,実引数のリストをAとする。この条件の下で,次の
処理を実行する。
a) メソッド呼出しに《ブロック》が渡された場合,Bをその《ブロック》とする。そうではない場合,Bを
block-not-givenとする。
b) が特異クラスをもつ場合,その特異クラスをCとする。そうではない場合,RのクラスをCとする。
c) を起点とし,名前がMであるメソッド束縛を探索する(13.3.4参照)。
d) 束縛が見つかり,その値がundefでない場合,Vをその束縛の値とする。
e) そうではない場合で,Mがmethodmissingの場合の動作は未規定とする。Mがmethodmissing
でない場合,名前がMであるSymbolクラスの直接のインスタンスをAの先頭に追加し,
methodmissingメソッド(15.3.1.3.30参照)をRに対しAを実引数リスト,Bを《ブロック》として
呼び出す。Oを呼出し結果の値とし,手順j)から処理を続ける。
f) メソッドが呼出し可能かどうかを調べるため,Vの可視性をチェックする(13.3.5参照)。メソッドが
呼び出せない場合は,名前がMであるSymbolクラスの直接のインスタンスをAの先頭に追加し,
methodmissingメソッドをRに対しAを実引数リスト,Bを《ブロック》として呼び出す。Oを呼
出し結果の値とし,手順j)から処理を続ける。
g) 実行環境を,次のように変更する。
1) のクラスモジュールリストを クラスモジュールリスト に積む。
2) を self に積む。
3) を 呼出し時メソッド名 に積む。
4) 可視性publicを 省略時可視性 に積む。
5) の定義名を 定義時メソッド名 に積む。
6) を ブロック に積む。
7) 空の束縛の集合を 局所変数束縛集合 に積む。
h) の《メソッド仮引数部》を,次の手順で評価する。
――――― [JIS X 3017 pdf 103] ―――――
98
X 3017 : 2013 (ISO/IEC 30170 : 2012)
1) 《メソッド仮引数部》の《仮引数リスト》をLとする。
2) の,《必須仮引数リスト》の全ての《必須仮引数》,《省略可能仮引数リスト》の全ての《省略可能仮引
数》,及び《配列仮引数》をそれぞれ,Pm,Po及びPaとする。Aの要素の個数,Pmの個数,及びPo
の個数をそれぞれ,NA,NPm及びNPoとする。《必須仮引数》又は《省略可能仮引数》が存在しない場
合,NPm及びNPoは0とする。Sbを現在の局所変数束縛の集合とする。
3) AがNPmより小さい場合,ArgumentErrorクラスの直接のインスタンスを例外として発生させる。
4) aが存在せず,かつ,NAがNPmとNPoとの合計より大きい場合,ArgumentErrorクラスの直接の
インスタンスを例外として発生させる。
5) そうではない場合,Aのそれぞれのi番目の実引数Aiについて,A内の順序と同順に,次の手順を
行う。
i) L内に現れる順番でi番目の《必須仮引数》又は《省略可能仮引数》を,Piとする。
ii) 該当するPiが存在しない場合,手順h) 6)から処理を続ける。
iii) iが必須仮引数の場合,nをその《必須仮引数》とする。Piが省略可能仮引数の場合,nをその《省
略可能仮引数名》とする。名前がn,値がAiである変数束縛を作成し,それをSbに追加する。
6) AがNPmとNPoとの合計より大きく,かつ,Paが存在する場合は,次の手順を行う。
i) 超過した実引数の数と長さとが等しいような,Arrayクラスの直接のインスタンスXを作成する。
ii) 超過した実引数を,実引数リストに現れる順序を保って,Xに格納する。
iii) をPaの《配列仮引数名》とする。
iv) 名前がnで,値がXである変数束縛を作成し,それをSbに追加する。
7) AがNPmとNPoとの合計より小さい場合,次の手順を行う。
i) 対応する実引数のないそれぞれの省略可能仮引数POiに対し,POiの《省略値仮引数式》を評価し,
Xを評価結果の値とする。
ii) をPOiの《省略可能仮引数名》とする。
iii) 名前がnで,値がXである変数束縛を作成し,それをSbに追加する。
8) Aが,NPmとNPoとの合計より少ないか同数であって,かつ,Paが存在する場合は,次の処理を実
行する。
i) Arrayクラスの空の直接のインスタンスXを作る。
ii) をPaの《配列仮引数名》とする。
iii) 名前がnで,値がXである変数束縛を作成し,それをSbに追加する。
9) の《Proc仮引数》が存在する場合,Dを ブロック の一番上の要素とする。
i) Dがblock-not-givenの場合,Xをnilとする。
ii) そうではない場合,Procクラスに対し,newメソッドを呼び出す。この呼出しには,空の実引
数リスト及び《ブロック》Dを渡す。そのメソッド呼出しの値をXとする。
iii) 《Proc仮引数》の《Proc仮引数名》をnとする。
iv) 名前がnで,値がXである変数束縛を作成し,それをSbに追加する。
i) Vの《メソッド本体》を評価する。
1) この《メソッド本体》の評価が《return式》によって終了された場合,次の手順を行う。
i) 《return式》が《ジャンプ実引数》をもつ場合,Oをその《ジャンプ実引数》の値とする。
ii) そうではない場合,Oをnilとする。
2) そうではない場合,Oを評価結果の値とする。
――――― [JIS X 3017 pdf 104] ―――――
99
X 3017 : 2013 (ISO/IEC 30170 : 2012)
j) ,
クラスモジュールリストself , 呼出し時メソッド名, 省略時可視性 , 定義時メソッド名 ,
ブロック及び 局所変数束縛集合 の一番上の要素を取り除くことによって,実行環境を復元する。
k) このメソッド呼出しの結果はOとする。
手順g)で変更された, 局所変数束縛集合 を除く実行環境の属性の,一番上の要素の集合が対応するメ
ソッド呼出し又は《super式》[11.3.4 d)参照]を,現在のメソッド呼出しと呼ぶ。
13.3.4 メソッド探索
メソッド探索は,インスタンスメソッド束縛を解決する処理である。
Mをメソッド名,Cをメソッド探索の起点となるクラス又はモジュールとする。この条件の下で,メソ
ッド束縛は次のように解決する。
a) 名前がMであるメソッド束縛が,Cのインスタンスメソッド束縛の集合内に存在する場合,その束縛
をBとする。
b) そうではない場合,CのインクルードモジュールリストLmを末尾から順に処理する。Lm中のそれぞ
れのモジュールに対して,そのインスタンスメソッド束縛の集合内に,名前がMであるメソッド束縛
が存在するかどうか確認する。
1) 該当する束縛が存在する場合,その束縛をBとする。
2) そうではない場合,次の手順を行う。
i) Cが直接のスーパークラスをもたない場合,束縛は解決されなかったとみなす。
ii) が直接のスーパークラスをもつ場合,Cの直接のスーパークラスを新たなCとし,手順a)から
探索処理を継続する。
c) が,解決されたメソッド束縛であるとする。
13.3.5 メソッド可視性
13.3.5.1 概要
メソッドは,その呼出しが許可される条件によって,public,private,protectedの3種類に分類される。
この条件を決定するメソッドの属性を,メソッドの可視性と呼ぶ。
13.3.5.2 publicメソッド
publicメソッドとは,その可視性属性の値がpublicであるメソッドとする。
publicメソッドは,呼出しの制限はない。
13.3.5.3 privateメソッド
privateメソッドとは,その可視性属性の値がprivateであるメソッドとする。
privateメソッドは,レシーバを明示的に指定して呼び出すことができない。つまり,privateメソッドの
呼出し内のレシーバに対応する位置に《一次式》又は《連鎖メソッド呼出し》が現れる場合,そのメソッドは
呼び出すことができない。ただし,メソッド呼出しが次のいずれかの形式であり,かつ,その《一次式》が《self
式》である場合は,メソッドを呼び出すことができる。
− 《単一メソッド代入》
− 《演算付きメソッド代入》
− 《単一添字代入》
− 《演算付き添字代入》
13.3.5.4 protectedメソッド
protectedメソッドとは,その可視性属性の値がprotectedであるメソッドとする。
protectedメソッドは,次の条件を満たす場合に限り,呼び出すことができる。
――――― [JIS X 3017 pdf 105] ―――――
次のページ PDF 106
JIS X 3017:2013の引用国際規格 ISO 一覧
- ISO/IEC 30170:2012(IDT)
JIS X 3017:2013の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語