Open cocco84 opened 2 months ago
replでcallすることを想定していませんでした 確かにそのような使い方は面白いですね
repl実行中に限り、同一ファイルの再callで重複定義があればそれを上書きするというような実装が可能かどうか調査してみます 定義済みの関数をファイルから削除した場合に定義も消すというのは難しいですが、定義の上書きだけならできるかもしれません
もしそれが可能であればホットリロードもやれたらやりたいですね (repl起動時に読み込んだファイルの変更を検知して自動で取り込むような機能)
# module.uwsを読み込んだ状態で起動
PS> uwscr --repl module.uws
# module.uwsのhoge()を呼ぶ
uwscr> hoge()
1
# module.uwsを編集しhoge()の出力を2にする
# ファイル変更を検知してホットリロード処理
notice: reloaded module.uws
uwscr> hoge()
2
callに限らずreplでは関数やmoduleの再定義を可能とするのが良さそう (するとcall再読み込みでも定義が上書きされる)
uwscr> function foo()
- result = 1
- fend
uwscr> foo()
1
uwscr> function foo()
- result = 2
- fend
uwscr> foo()
2
uwscr>
実現可能かどうかの確認と、やるとしたらどこまで上書きを許可するかの検討は必要
1.0.1では対応せず 後日対応予定
要望
要望の背景
replモードは大変便利でコーディング中のテスト等で活用しています。 その手順の中で
のように
というような事を行っています。
想定している出力結果にならない場合はhoge.uwsファイルを再編集して実行しますが、 現状のreplだと再コールしても同一の関数は再度呼び出されない(正確には読み込し直さない?)ので少し不便です。
要望
個人的にはrepl限定で動作する関数(そういうものができるのであれば)でよいのですが reloadのような関数・またはcallへのオプションを実装し、ファイルやモジュールの再読み込みを可能にすると コードのテストも楽になりそうなのですがいかがでしょうか。
使用としては以下のようなイメージです。
補足用コード
No response