Lua とか Squirrel を使ってる人に会ったら聞きたいことをメモ。
Squirrel
Lua と Squirrel で気になっていることメモ - 好き勝手に・げーあにん?
* リロードどうしてる?
自分自身の昨日のメモなんだけど、とりあえず私の現状を書いとく。といっても、素直に対象の class と、その instance を全部作り直してるだけだけど。
class Class { function a() {print("a\n")} } local x = Class() x.a() // ここリロードのかわり delete Class class Class { function a() {print("AAA\n")} } print("roottableから消えただけで、まだ生きている\n") x.a() print("新しく作った方を使うためにインスタンス作り直し\n") x = Class() x.a()
a
roottableから消えただけで、まだ生きている
a
新しく作った方を使うためにインスタンス作り直し
AAA
- delete class
- 同名の新しい class を定義
- instance を全部作り直し
とりあえず、一番簡単な方法はこれだよなぁ。インスタンス全部作り直さないといけないのがバカっぽいけど、Squirrel の class はインスタンス作っちゃうと変更できなくなるからなぁ。
インスタンスを生かしたまま関数だけリロードしようとすると、こんな感じ?
// 関数だけ別のインスタンスに持たせとく ClassPrototype <- class { function a() {print(num+"\n")} }() class Class { constructor(n) {num = n} num = 0 // ClassPrototype のメソッドを使う function a() {ClassPrototype.a.call(this)} } local x = Class(1) local y = Class(2) x.a() y.a() // ここリロードのかわり ClassPrototype = class { function a() {print(num*10+"\n")} }() x.a() y.a()
1
2
10
20
これはこれでいいような気もしないでもないけど、もうちょっとなんとかならないものか。
今のところは class 単位で全部作り直しで、あんまり困ってなかったりするんだよな。困ってきたらまた考える?