aiscript icon indicating copy to clipboard operation
aiscript copied to clipboard

feat: 関数同士の比較を行えるようにしたい

Open ikasoba opened this issue 1 year ago • 20 comments

現在の実装だと関数同士の比較は常にfalseを返すのでなんとかしたい https://github.com/aiscript-dev/aiscript/blob/aiscript-next/src/interpreter/util.ts#L89

一応リリースされているもの仕様を変えることになるので破壊的変更としてnextの方へPRを出したほうが妥当かもしれない? もっと早くに気づければよかった・・・てへぺろ

ikasoba avatar Jan 16 '24 15:01 ikasoba

普通にJavaScriptの等号で比較するか、deep-equalにするか

FineArchs avatar Jan 16 '24 15:01 FineArchs

#225 の連想配列が実装されるなら、そこと等価性の概念を一緒にしたい

FineArchs avatar Jan 16 '24 15:01 FineArchs

==ならJavaScriptの等号で判定、===ならdeep-equalのように分ける手もある

FineArchs avatar Jan 16 '24 15:01 FineArchs

あまり想像つかないのですがdeep-equalの場合は処理内容が一致する必要があるって感じでしょうか

ikasoba avatar Jan 16 '24 15:01 ikasoba

そっちだと==のニュアンスが近いか

ikasoba avatar Jan 16 '24 15:01 ikasoba

javascriptだと===は厳格な評価を意味するので処理内容さえ合えばいいという曖昧な評価方法は==のが自然かもしれないと思った

ikasoba avatar Jan 16 '24 15:01 ikasoba

あまり想像つかないのですがdeep-equalの場合は処理内容が一致する必要があるって感じでしょうか

そうですね、処理内容と引数が全て合致すればtrueみたいな感じです

FineArchs avatar Jan 16 '24 15:01 FineArchs

なるほどです

ikasoba avatar Jan 16 '24 15:01 ikasoba

あれ、aiscriptには===演算子の実装はなさそうです。

ikasoba avatar Jan 16 '24 15:01 ikasoba

あれ、aiscriptには===演算子の実装はなさそうです。

なので生やしちゃおうかなって…

FineArchs avatar Jan 16 '24 15:01 FineArchs

===演算子はまた別の機会にしたいかもしれない

ikasoba avatar Jan 16 '24 15:01 ikasoba

じゃあA deepeq Bとか?

FineArchs avatar Jan 16 '24 15:01 FineArchs

#460 を改変すれば技術的には可能なはず

FineArchs avatar Jan 16 '24 15:01 FineArchs

僕としてはdeep-equal用の演算子を追加するのは便利で良いものだと思うけど、関数同士の比較の実装作業と一緒にやるのはヘンかと思ったんですよね

ikasoba avatar Jan 16 '24 15:01 ikasoba

なので===演算子の件は別のissueとして議論したい

ikasoba avatar Jan 16 '24 15:01 ikasoba

それじゃあissue切っておきますね

ikasoba avatar Jan 16 '24 15:01 ikasoba

#528 立てました

ikasoba avatar Jan 16 '24 15:01 ikasoba

関数の==は配列・オブジェクト同様、JavaScriptの等号による比較でよさそうですかね

FineArchs avatar Jan 16 '24 15:01 FineArchs

Core:eqで行う評価基準の話であれば、僕としてはその参照比較で良いかと思いますね

ikasoba avatar Jan 16 '24 15:01 ikasoba

明後日までになにか問題がなければ実装に取り掛かりますね

ikasoba avatar Jan 16 '24 16:01 ikasoba