構造体でローカル関数を定義することができます。ローカル関数には、関連する関数のセットをパッケージにする便利な機能があり、複数のスクリプトでグローバル関数が定義されるとき、名前の競合を避けることができます。
例: |
この構造体定義 foo は、3 つの要素 a 、 b 、および c と、2 つのローカル関数 bar および baz を定義しています。これらの関数には、次のように構造体内のプロパティとして、または構造体インスタンスのプロパティとしてアクセスすることができます。 |
構造体の定義で宣言されているローカル関数は、その構造体で定義されているメンバ データ変数の参照を作成することができます。構造体インスタンスでそのメンバ関数が呼び出されると、参照はそのインスタンスのメンバにアクセスします。これにより、構造体自身で構造体関数のデータ構造を初期化し、維持することができます。構造体のメンバを使用する関数を含むスクリプトの例を次に示します。
このスクリプトでは、構造体はデータ メンバ 3 つと関数メンバ 6 つを持ちます。 generateRV() 関数での構造体データ メンバに対する参照に注意してください。30 行目では、 RndVals 構造体インスタンスが作成され、変数 MyRandomVals に保存されます。31 行目では、構造体インスタンスの setSeed() 関数が呼び出されます。これで構造体インスタンスのデータ メンバ seedVal に指定値を保存し、構造体インスタンスのランダム シード変数を初期化します。32 行目では、構造体インスタンスの generateRV() 関数が呼び出されます。これにより、 setSeed() で指定されるシード値を使ってランダム数を初期化し、データ メンバ RndVals にランダム数の配列を設定および保存し、データ メンバ ptr を更新し、ランダム数の配列を返します。
構造体で定義されたローカル関数は、すべての構造体インスタンスに保存されません。ローカル関数は構造体の定義でいったん保存され、インスタンスでの引用は構造体内の定義を参照することになります。