Spoonail-Iroiro / maginai

Mod loader
MIT License
1 stars 2 forks source link

メソッドパッチを、パッチ後メソッドを直接渡すようにして簡易化 #44

Closed Spoonail-Iroiro closed 3 months ago

Spoonail-Iroiro commented 4 months ago

現行のPatcher.patchMethodの使用方法を以下のケース等で間違えやすいので使いやすくしたい

今のところの新案として具体的には

// 元のメソッドを呼び出してそのまま結果を返すメソッドでパッチ
maginai.patcher2.patchMethod(tGameClass, 'methodName', (self, args, original, context) => {
  return original.call(self, ...args);  
})

のような形で直接パッチ後のメソッドを渡すようにするインターフェースに変更する。 この形だと元々のthisを引数selfとして明示的に渡すようにしているのでアロー関数も使える。

パッチ後関数への引数は要検討

soeklgb commented 4 months ago

callは戸惑いやすいのでoriginalをラップしてoriginal(...args)で呼べるようにしてもいいと思う。callのself部分にself以外が渡されるケースが思いつかない。 あと質問なんですけどcontextって何が入る予定なんでしょうか?

Spoonail-Iroiro commented 4 months ago

あー確かに事前にbindしてしまえばいいのか

contextはself・args・original以外の呼び出し時情報を持つオブジェクトのイメージだったけど今のところ具体的に思いつかないのでなしでもいいかも(後から引数増やしても問題ないし)