配列の代入についてNo.06337
緒方聡 さん 10/05/17 22:40
 
お世話になってます。

以下のようなマクロで
----
#a1[0] = 1;
#a1[1] = 2;
#a1[2] = 3;

#a2[0] = 4;
#a2[1] = 5;
#a2[2] = 6;

#a2 = #a1; // 配列の参照をコピーしたつもり

message str(#a2[0]) + ", " + str(#a2[1]) + ", " + str(#a2[2]);

// "1, 2, 3" を期待したが "4, 5, 6" が表示される

----
コメントにあるように配列の参照をコピーしようとしたところ
C や Java やその他メジャーなスクリプト言語のように
動作しませんでした(コピーされませんでした)。

これはこうした仕様ということになりますでしょうか?

[ ]
RE:06337 配列の代入についてNo.06338
きいろいまふらあ さん 10/05/18 07:39
 
緒方聡さん、こんにちは。きいろいまふらあと申します。

添え字を書かない場合は、配列変数ではなく単純変数を指すようです。ただし、
menuarray文で配列文字列変数を仕様する場合など、一部例外もあるようです。

ここは「秀丸エディタ マクロ作者会議室」ということになってるので、マクロ
の仕様についての公式見解は、2番ないし8番会議室(あるいは常連さん会議
室)で、サイトー企画さんに直接確認した方がよいかもしれません(こちらの会
議室にもコメントいただけるかもしれませんが…)。

//数値変数

#a1[0] = 1;
#a1[1] = 2;
#a1[2] = 3;
#a1 = 111;

#a2[0] = 4;
#a2[1] = 5;
#a2[2] = 6;
#a2 = 222;

message str(#a2[0]) + ", " + str(#a2[1]) + ", " + str(#a2[2]);
message str(#a2);

#a2 = #a1; // 配列の参照をコピーしたつもり

message str(#a2[0]) + ", " + str(#a2[1]) + ", " + str(#a2[2]);
message str(#a2);

//文字列変数

$a1[0] = "1";
$a1[1] = "2";
$a1[2] = "3";
$a1 ="111";

$a2[0] = "4";
$a2[1] = "5";
$a2[2] = "6";
$a2 ="222";

message $a2[0] + ", " + $a2[1] + ", " + $a2[2];
message $a2;
menuarray $a2,3;

$a2 = $a1; // 配列の参照をコピーしたつもり

message $a2[0] + ", " + $a2[1] + ", " + $a2[2];
message $a2;
menuarray $a2,3;

endmacro;

[ ]
RE:06338 配列の代入についてNo.06339
秀丸担当 さん 10/05/18 09:44
 

>#a2 = #a1; // 配列の参照をコピーしたつもり

こういう形で配列をまるごとコピーすることは、秀丸エディタのマクロではでき
ないです。
いまのところの仕様では、1つずつコピーしていただくしかないと思います。
こういう仕様ということでお願いします。

[ ]