aiscript
aiscript copied to clipboard
プリミティブプロパティを破壊的にするかどうか選べるようにする
例えばarr.=reverse()
なら破壊的、arr.reverse()
なら非破壊的というように、元の型と返り値の型が同じな全てのプリミティブプロパティにおいて元の値を変更するかどうかを選べるようにしたいです。
破壊的変更なのでNextに組み込みたいです。
専用構文等を用意する感じですか?
専用構文の場合ユーザー定義のオブジェクト等でややこしそう?
別関数としてarr.reversed
のようにするのがとりあえず安全な方法かと思います
(今の段階ではないけど)引数に変更されるオブジェクトを入れる場合も対応できるように、Rubyっぽく識別子にわかりやすく記号付けるのも良さそう? (この場合だと論理否定とわかりずらくなりそうかもしれないけど)
[].reverse!() // 配列のオブジェクトが変更される
[].reverse() // 新しく反転された配列が返される
@rename!(obj, newName) {
obj.name = newName
}
let user = { name: "blobdog" }
rename!(user, "nyanpuppu-")
rename // !は識別子の一部なので参照エラー
専用構文の場合ユーザー定義のオブジェクト等でややこしそう?
すみません、もう少し詳しくお願いします
引数に変更されるオブジェクトを入れる場合も対応できるように、Rubyっぽく識別子にわかりやすく記号付けるのも良さそう?
ユーザーの関数定義では!
が末尾についた時だけ参照渡しが使え、std関数等もそれに倣う、みたいな感じですか?
ユーザーの関数定義では!が末尾についた時だけ参照渡しが使え、std関数等もそれに倣う、みたいな感じですか?
個人的には、Rubyでは特に引数について制約が付くわけではないらしいので、注釈程度に考えていました。 引数について制約を付けるのも面白そうですね。