copy | put 様々な値 to | into 代入対象
様々な値 | 代入する値 |
代入対象 | 値を代入する、変数、属性 |
様々な値 | 代入した値 |
様々な値を複製し、代入する。
アプリケーション命令のクリップボードにコピーするcopy命令と混乱するので、代入にはset命令を主に使用していく方が混乱が無くて良い。
クリップボードにコピーする場合は、OSAXのset the clipboard toを使った方が、文章としても、分かりやすい。
また、copyはアプリケーションが持つオブジェクトを複製できるが、アプリケーション命令のduplicateで同じことができ、かつオプションも豊富なので、duplicateを使う方がいい(Appleも使わないように指導している)
では、いつcopyを使うかということになるのだが、これはかなり限定された使い方となる。
リストやレコード、スクリプトオブジェクトの値を変数に代入する場合、値がメモリに複製され、それが代入先の変数の値になり、その後両者に関係無く変更できる。
setの場合、値は複製されず、代入先の変数はリストやレコードと値の格納先が共有される。このため代入先に指定した変数の値を変更すると、代入元のリストやレコードの値が変更され、またその逆もある。
つまりデータの共有を行いたく無い時に限りcopyを使っていくことになる。
リストやレコード、日付、ハンドラ、スクリプトオブジェクトを使うとき以外では、copyとsetに違いは無く、両方とも値を複製して代入する。
copyとsetでは、引数の位置が逆なのに注意すること。
set x to {1, 2, 3, 4, 5}
set y to x
copy 100 to item 3 of x
y