外部マクロ中のサブルーチンを呼び出すこNo.10451
楽をしたい さん 24/09/10 01:45
 
外部マクロファイルの中のサブルーチンを呼び出すことはできますか?

例えばA.macが

execmacro "B.mac", "sub0", 0;

だったとします。

B.macを

call getarg(0) getarg(1);

endmacro  str(##return);

sub0:
 ##n = ##1 + 1;
return ##n;

sub1:
 ##n = ##1 + 2;
return ##n;

という具合に同一マクロファイル中に複数のマクロを同居させたいのです。

理由は2つ。

一つは多数のマクロで使い回せる外部マクロが増えて管理が面倒になってきた。探す
のも既に作成済みか調べるのも面倒になってきた。

二つ目は外部マクロの機能・処理が増えて複雑化したのでサブルーチン化でコード量
を抑えている。ある処理用の外部マクロ内に使い回せるサブルーチンが同居していた
方が外部マクロの増殖を抑えたり減らしたりできたりするのではないか。

と考えています。

[ ]
RE:10451 外部マクロ中のサブルーチンを呼No.10452
こみやんま さん 24/09/10 11:08
 
>外部マクロファイルの中のサブルーチンを呼び出すことはできますか?

■execjs
この類で今のところ一番普通に実装できるのは execjs だと思いますよ。
HTML/JS の

```
<script src="****.js" />
```

に限りなく近い機能なので、関数郡を****.jsに記述しておいて、
あとでマクロから使うのに適しています。


■execmacro
素の秀丸マクロベースでも、分岐用の引数を渡せばいけるっちゃいけるでしょうけれ
ども...
結局、渡す値の「型(=数値か文字列化)もつぶれてしまいますから、
引数が文字列になっている形での、「専用の関数受け口」を作った方が楽ですかねぇ...

ABC:
   // 引数は数値や文字列が混じってる

IABC:
   // 引数が文字列のものだけなので、自分でvalなりをする
   call ABC val($$1), ##2
   return $$return;


execmacro "aaa.mac", "IABC", "3", str(10);


「include」機能があればよかったんじゃないかなーとは思いますが、
エラーの個所を正しく表示するための機能に大きくメスを入れる必要があるから、
過去申請があっても実装されなかったのかも。

(今では複雑になればなるほど、普通にjsmode使いなよって話もありますし)

[ ]
RE:10451 外部マクロ中のサブルーチンを呼No.10453
秀丸担当 さん 24/09/10 13:34
 
From:     Takashi Yamamoto <xxxx@maruo.co.jp>
To:       xxxxxxxxxx@maruo.co.jp
Bcc:      xxxx@maruo.co.jp
Subject:  Re: hidesoft.4:10452| RE 10451 外部マクロ中のサブルーチンを呼び出
すことは可能?

最近ではこみやんまさんの言われる通り、JavaScriptで書いて、execjsにしたほうが
いろいろやりやすいです。

従来型のマクロで書く場合は、呼んでから分岐するか、call文は文字列型変数の指定
もできるので、以下のように書くこともできます。


//test.mac
execmacro "sub.mac", "SUB1", "ぱらめーた";
$ret = getresultex(-1);
message $ret;

execmacro "sub.mac", "SUB2", "パラメータ";
$ret = getresultex(-1);
message $ret;

endmacro;




//sub.mac
$a = getarg(0);
$param1 = getarg(1);
call $a, $param1;
$r = $$return;
endmacro $r;

SUB1:
return "SUB1が呼ばれた:"+$$1;

SUB2:
return "SUB2が呼ばれた:"+$$1;


---以下の内容はコミュニテックス会議室システムにより付加されました。
本文中のメールアドレスは伏せ字に変換されました。伏せ字にしたくない場合
はメールアドレスを""で囲んで書き込んでください。

[ ]
RE:10453 外部マクロ中のサブルーチンを呼No.10454
楽をしたい さん 24/09/10 23:26
 
コメントありがとうございます。
ただJavaScriptは未経験。Rustを勉強したいと考えているのでちょっとリソースが。
従来型のマクロで試してみようと思います。
ありがとうございました。

[ ]