サブルーチンの返り値No.06152
ぱと さん 02/12/09 23:03
 
あるサブルーチンの最後に、文字列の比較を行い、同じ場合は 1 を返し、違う場
合は0を返す。んで、呼び出し元で、返り値によって、処理を分岐するというよう
なマクロコードを書いてます。

loaddll "tkinfo.dll";
call test;
#r = result;
if(#r){
  message "同じだった!";
  endmacro;
}else{
  message "違ってた!";
  endmacro;
}


test:
$str1 = "A";
$str2 = "B";

if($str1 == $str2){
  message "同じ!";
  return 1;
}else{
  message "違う!";
  return 0;
}

たとえば上記のようなコードで、
$str1 = "A";
$str2 = "A";
として、実行すると、
「同じ!」「同じだった!」となって、こちらは期待する動作なのですが、
$str1 = "A";
$str2 = "B";
として実行すると
「違う!」「同じだった!」となってしまいます。つまりどちらの場合も、サブ
ルーチンからの result は 1 が返っているようなのです。

どのようなコードを書けば、0 を返すことができるのでしょうか?

----
ぱと

[ ]
RE:06152 サブルーチンの返り値No.06153
ひろ さん 02/12/09 23:14
 
 ぱとさん今日は、ひろです。
> call test;
> #r = result;
 サブルーチンの返り値は、result ではなく ##return もしくは $$return で
取得します。

[ ]
RE:06153 サブルーチンの返り値No.06154
ぱと さん 02/12/09 23:24
 
ひろ さん

>> call test;
>> #r = result;
> サブルーチンの返り値は、result ではなく ##return もしくは $$return で
>取得します。

今回の場合
#r = ##return;
ですね。
テストマクロを動かしてみると、ばっちりうまく行きました。

まいど、どうもありがとうございます。

勉強不足ですみません。もっと人のマクロをいっぱい読まなくては行けませんね。
それか、秀丸マクロの解説本でも探してきて一冊マスターしてみようかな。

----
ぱと

[ ]
RE:06154 サブルーチンの返り値No.06163
ひろ さん 02/12/10 12:32
 
 ぱとさん今日は、ひろです。
> 秀丸マクロの解説本でも探してきて一冊マスターしてみようかな。
 既に出版されているのは古くて、あまり役に立たないかも。
 それよりも http://www.maruo.co.jp/turukame/2/m021210.html#6161 でも
紹介されていた Q&A 集や、公開されているマクロを見た方が役に立つと思い
ます。

[ ]
RE:06163 サブルーチンの返り値No.06167
ぱと さん 02/12/11 15:33
 
ひろ さん

> 既に出版されているのは古くて、あまり役に立たないかも。
> それよりも http://www.maruo.co.jp/turukame/2/m021210.html#6161 でも
>紹介されていた Q&A 集や、公開されているマクロを見た方が役に立つと思い
>ます。

小さいマクロを自分でこまごま書いていると、きっとこのレベルのマクロだった
ら、マクロ師の皆さんは公開はしないまでも、自分の所では便利に使っているも
のがいっぱいあるんだろうなあとか、いかにもよくありそうな、サブルーチンを
書いてるとこういうのって、自分で書かないでも、定型的な処理なんだろうなあ
とか、あるいは、そういう小さなサブルーチンこそ、お手本になるコードを読み
たいなあと思ってしまいます。

小物マクロ投稿用の会議室が一つあると面白いような気がするんですけど、すぐ
にすたれちゃうかなあ?

ライブラリにアップロードするまでも無いような小物マクロを紹介したり、ちょ
っとしたサブルーチンや定型的な処理について、ちょっと質問すると、マクロ師
の皆さんが答えてくれたりとそんな感じです。

あるいは、マクロ会議室の方は比較的投稿が少ないので、マクロ全般という形に
するとか。

----
ぱと

[ ]