aiscript icon indicating copy to clipboard operation
aiscript copied to clipboard

プリミティブプロパティを破壊的にするかどうか選べるようにする

Open FineArchs opened this issue 1 year ago • 5 comments

例えばarr.=reverse()なら破壊的、arr.reverse()なら非破壊的というように、元の型と返り値の型が同じな全てのプリミティブプロパティにおいて元の値を変更するかどうかを選べるようにしたいです。

破壊的変更なのでNextに組み込みたいです。

FineArchs avatar Nov 14 '23 11:11 FineArchs

専用構文等を用意する感じですか?

salano-ym avatar Nov 14 '23 11:11 salano-ym

専用構文の場合ユーザー定義のオブジェクト等でややこしそう? 別関数としてarr.reversedのようにするのがとりあえず安全な方法かと思います

salano-ym avatar Nov 14 '23 11:11 salano-ym

(今の段階ではないけど)引数に変更されるオブジェクトを入れる場合も対応できるように、Rubyっぽく識別子にわかりやすく記号付けるのも良さそう? (この場合だと論理否定とわかりずらくなりそうかもしれないけど)

[].reverse!() // 配列のオブジェクトが変更される
[].reverse()  // 新しく反転された配列が返される

@rename!(obj, newName) {
  obj.name = newName
}

let user = { name: "blobdog" }

rename!(user, "nyanpuppu-")

rename // !は識別子の一部なので参照エラー

ikasoba avatar Nov 14 '23 12:11 ikasoba

専用構文の場合ユーザー定義のオブジェクト等でややこしそう?

すみません、もう少し詳しくお願いします

引数に変更されるオブジェクトを入れる場合も対応できるように、Rubyっぽく識別子にわかりやすく記号付けるのも良さそう?

ユーザーの関数定義では!が末尾についた時だけ参照渡しが使え、std関数等もそれに倣う、みたいな感じですか?

FineArchs avatar Nov 14 '23 15:11 FineArchs

ユーザーの関数定義では!が末尾についた時だけ参照渡しが使え、std関数等もそれに倣う、みたいな感じですか?

個人的には、Rubyでは特に引数について制約が付くわけではないらしいので、注釈程度に考えていました。 引数について制約を付けるのも面白そうですね。

ikasoba avatar Nov 14 '23 15:11 ikasoba