🤖

using に対応した Symbol を作る

2024/05/26に公開

Symbol に [Symbol.dispose] プロパティを付与したい

スコープ外を検知してセルフGCするSymbol型、要はスマートポインタもどきをピュアに実装したい
いやいや、Symbol はプリミティブでしょうが…はい

解: [Symbol.toPrimitive]() で Symbol を返却するオブジェクトを作る

当たり前と言えば当たり前の話、({ [Symbol.toPrimitive]: () => someSymbol })someSymbol はプロパティとして同様の働きをする

const MY_SYMBOL: symbol = Symbol("address");

using GC_SYMBOL: any = {
    [Symbol.toPrimitive](): symbol {
        return MY_SYMBOL
    },
    [Symbol.dispose](): void {
        // 参照外になり次第、実行されます^^
        delete target[MY_SYMBOL]; // これはやりすぎ
    }
}

const target = {
    [MY_SYMBOL]: "success"
}

target[MY_SYMBOL] === target[GC_SYMBOL] // true!!!!!!!!!!!!

いかがでしたか?

using 来てるな〜という気持ちです(まだ来てねーよ

Discussion