SSブログ

クラス作成補助内部関数等作成(v2.0.25.0) [資産管理電卓(LineCalc)]

資産管理電卓 v2.0.25.0 で以下の機能対応を行いました。

・合成IDから無名関数を得る lambda 内部関数対応
・クラス作成補助内部関数 class 作成
・代入なしコンテキスト削除対応

・合成IDから無名関数を得る lambda 内部関数対応
ローカル変数の合成関数に # をつけて無名関数を得ることができていませんでしたので lambda 内部関数を作成しました。

{
 vn = "tmp",
 fnc((vn & "1"),123), // () でくくって合成IDを作成して関数定義
 fn = lambda((vn & "1")), // 合成IDから無名関数を得る
 fn
}


コンテキストリソースの関数は # で無名関数を得られます。

{
 ctx = context,
 fnc(ctx.("tmp"),123),
 fn = #ctx.("tmp"),
 fn
}


・クラス作成補助内部関数 class 作成
コンテキストリソースを使ってクラスを作成できますが、記載が煩雑なのでクラス定義内部関数 class を作成しました。

{
 fnc(newCTes, // CTes クラス作成 new 関数定義
  {
   cls = context, // インスタンス作成
   cls.foo = 123, // クラス変数定義
   fnc(cls.fn,lprint(this.foo)), // クラス関数定義
   cls // インスタンスを返す
  }
 ),
 cl = newCTes,
 cl.fn
}


これは class 内部関数を使うと
{
 class(CTes, // CTes クラス定義
  {
   cls.foo = 123, // クラス変数定義
   fnc(cls.fn,lprint(this.foo)), // クラス関数定義
  }
 ),
 cl = newCTes,
 cl.fn
}

上記で記載可能です。クラスメンバは cls.メンバ として記載してください。
定義式は自由に記載可能です。
クラス作成関数は自動で new が追加され定義されます。

{
 ctx = context, 
 class(ctx.CTesBase, // ベースクラス
  {
   cls.foo = 123, 
   fnc(cls.fn, lprint(this.foo))
  }
 ), 
 class(ctx.CTes, 
  {
   cls = this.newCTesBase, // ベースクラス作成以下オーバーライド
   cls.yaa = 321, 
   fnc(cls.fn, lprint(this.foo & ":" & this.yaa))
  }
 ), 
 cl = ctx.newCTes, 
 cl.fn
}

上記ではクラスの継承を行っています。
トップにコンテキストを入れないと他のクラスにアクセスできないので統括するメインクラスを導入すると

{
 class(CMain, 
  {
   class(cls.CTesBase, 
    {
     cls.foo = 123, 
     fnc(cls.fn, lprint(this.foo))
    }
   ), 
   class(cls.CTes, 
    {
     cls = this.newCTesBase, 
     cls.yaa = 321, 
     fnc(cls.fn, lprint(this.foo & ":" & this.yaa))
    }
   ), 
   fnc(cls.main, 
    {
     cl = this.newCTes, 
     cl.fn
    }
   )
  }
 ), 
 cl = newCMain, 
 cl.main
}

上記になります。

コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。