アフィリエイト広告を利用しています
ファン
検索
<< 2023年10月 >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
最新記事
写真ギャラリー
最新コメント
タグクラウド
カテゴリーアーカイブ
月別アーカイブ
プロフィール
裏目小僧さんの画像
裏目小僧
プロフィール
日別アーカイブ

広告

posted by fanblog

2023年03月19日

pascalとJavaScript 関数内関数でハマった

Z変換の周波数特性表示の為に 数式処理をpascalコードからJavaScriptの変換作業をしてるのですが
最初クラスで書いてJavaScriptに変換しようとすると大量のthisに溢れたコードで鬱陶しくなり、これはダメだと 関数内関数に変更しました。
問題は数式処理をreplaceのコールバック関数を使った為にpascal側では関数内関数をコールバック出来ない事。
仕方なくpascal側ではreplace関数をexecで展開して呼ぶように修正。

さて大丈夫かと思ったら、大量の実行エラー。原因はクラスメンバー参照。
Pascal側では関数内関数でもselfはそのクラスを示しているし、メンバー参照も出来るのですが
JavaScriptの関数内関数はthisを自動では引き継いでくれないようです。
func1(param1,param2)の代わりに func1.call(this, param1, param2); てな置換が必要。
そうすると短い関数呼び出しが長くなってやはり鬱陶しい。
関数内関数にした事でメンバー数は減っているので
関数の先頭で z:=self;のように代入して関数内関数からはzを参照するように変更しました。
作ったツールでjavascriptに置換して thisを探して 元のpascalにz.を付ける作業をして全体が動きやっとデバッグが出来る状態に。

他にもAND OR は & | にしておけば論理でもバイナリでも問題ないけど not は ~ だと論理式の場合常にtrueになってしまうとか、なかなか厄介です。(notはif while untilで最初に見つけたら!に変換する事にしたけど)



posted by 裏目小僧 at 04:35| Comment(0) | TrackBack(0) | Lazarus
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

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

この記事へのトラックバックURL
https://fanblogs.jp/tb/11909168
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は30日以上新しい記事の更新がないブログに表示されております。