(この機構はiMopsでは実装されていません。)
構文も併行しています。ワード定義とメソッド定義の違いを除けば、"LOCAL"の代わりに"MLOCAL"を使い、":LOC, ;LOC"の代わりに":MLOC, ;MLOC"を使うだけです。ひな形としては、
:CLASS MyClass super{ OBJECT }
....
....
MLOCAL MyLocalSectMeth: { parm1 parm2 \ loc1 loc2 -- }
:m innerMeth1: [コード1] ;m
:m innerMeth2: [コード2] ;m
:m innerMeth3: innerMeth1: self innerMeth2: self [コード3] ;m
:m innerMeth4: [コード4] ;m
:MLOC MyLocalSectMeth:
innerMeth3: self innerMeth4: self [コード5]
;MLOC
....
...
;CLASS
のような感じになります。局所変数、名前付きパラメターは、セクション内で自由に利用でき、値も保持されます。セクション外からバインドできるメソッドは、主要メソッドである"MyLocalSectMeth:"だけです。セクション内からセクション外のメソッドを呼び出したり、ワードを呼び出したりするのは自由です。オブジェクト指向風の説明(どちらかというと、C++やJava流の言い方)をすれば、セクション内的なメソッドは、アクセスできる範囲が非常に限定されたプライベートメソッドである、といえるかもしれません。後続する、しかも同一セクション内のメソッドからしか"アクセス"できないからです。もちろん、内的なメソッドそれ自体としては継承もされません。
セクション内で共用できるテンポラリオブジェクトも、不具合がなくなったとして、説明しておきます。これも、まったくワードのlocal sectionと併行していて、"MLOCAL"で、メソッドセクションと局所変数を宣言した直後に、テンポラリオブジェクトを宣言します。:
.....
MLOCAL MyLocalSectMeth: { parm1 parm2 \ loc1 loc2 -- }
TEMP{
VAR MYVAR1
STRING MYString
}
:m innerMeth1: ...
....
....
メソッドのローカルセクションは、局所変数(名前付き引数)とテンポラリオブジェクトの両方を持つことも、どちらか一方だけを持つこともできます。どちらも持たないとコンパイルエラーになります。
関連項目:
最終更新:2018年12月26日 20:44