Let's PostScript(11) [1 2 3] [1 2 3] eq はなぜfalseなのか
以前の記事
で以下のようなことを言っていて、宿題だと書いていました。
本を見ると、eqオペレータとneオペレータは任意のObjectが比較できるようなのですが、配列でやってみたところ、うまくいきませんでした。 このあたりよくわからないので、後日の課題としたいと思います。
その時試したのが以下のScriptだったのですが、ここでfalseとなる理由がわかったような気がしますので、書き残しておこうと思います。
GS>[1 2 3] [1 2 3] eq == false
hlsme.hatenablog.com で自分が書いた内容を思い返すと、上記のScriptの結果がfalseとなるのは自明だなと。
GS>[1 2 3]
まず、最初の配列の登録で、仮想メモリに対して配列の実体を格納し、OperandStackにはユニークIDをPushします。
GS<1>[1 2 3]
次に、二つ目の配列の登録で、仮想メモリに対して2つ目の配列の実体を格納します。たまたま、最初の配列と同じ内容ですが、格納される仮想メモリは別の場所です。当然、OperandStackには最初の配列とは異なるユニークIDがPushされます。
GS<2> eq == false
eqオペレータでOperandStackから1つ目の配列のユニークIDと2つ目のユニークIDを受け取り、その両者が一致するか比較します。 当然、両者のユニークIDは別なので、結果はfalseとなります。
ということなのかなと。とりあえず、自分の中では納得がいったのですっきりしました。