setstaticvariable文の使い方No.08651
ゆたぽん山 さん 18/03/29 19:05
 
お世話になっております。
Version 8.79 32 bit editionを使っています。
OSはWin7です。

setstaticvariable文を使って、静的な変数をセットしようとしているのですが、う
まくセットできません。
ヘルプによれば、setstaticvariable 変数名,文字列値,共有フラグ
となっており、それにならったつもりで下記のように記載しても、思った通りにはな
りません。

setstaticvariable $Y2,$Y1,1;
$Y3 = input ("○○", $Y2);

$Y2は静的な変数の名前のつもりであり、$Y1は文字列型変数です($Y1の記憶には問
題はなく、確かに記憶されています)。
setstaticvariable文で、記憶されている文字列型変数$Y1の文字列を、静的な変数$Y
2として取り込み、
input関数のデフォルト値として静的な変数を表示したいのです。

どのようにすればうまく動くのでしょうか。
よろしくお願いいたします。

[ ]
RE:08651 setstaticvariable文の使い方No.08652
でるもんたいいじま さん 18/03/29 19:42
 
こんにちは。秀丸愛用者の「でるもんた・いいじま」です。

> setstaticvariable文を使って、静的な変数をセットしようと
> しているのですが、うまくセットできません。
> ヘルプによれば、setstaticvariable 変数名,文字列値,共有フラグ
> となっており、それにならったつもりで下記のように記載しても、
> 思った通りにはなりません。
>
> setstaticvariable $Y2,$Y1,1;
> $Y3 = input ("○○", $Y2);

ちょっと試せていないのですが、ヘルプには
> 第一パラメータと第二パラメータを共に
> ""を指定すると、全て消去します。
とあるので、第一引数には「変数名を記憶した文字列」を渡すと
いうことがよみとれます。

つまり、こうです。
setstaticvariable "Y2", $Y1, 1;
$Y3 = input( "○○", getstaticvariable("Y2") );

このへんの使い方について、ヘルプにサンプルコードを書いてあげた
ほうがいいかもしれませんね。ぜひご検討を。>>担当さま

☆ ☆ ☆

ちなみに余談ですが、このへん、なんとなく「shやcshのfor/foreach文」
と「perlやcmd.exeのfor/foreach文」とでのループ変数の指定方法の違い、
という話と似たようなことを思い出しました。

---- csh ----
foreach f ( *.txt ) # $fとしてはいけない
    echo "$f"
end

---- perl ----
foreach $s ( <STDIN> ) # 変数名に$をつける必要がある
{
    print $s;
}

[ ]
RE:08652 setstaticvariable文の使い方No.08654
ゆたぽん山 さん 18/03/30 10:23
 
でるもんた・いいじまさん

早速ありがとうございました。
試してみたのですが、残念ながら、やはりうまくゆきません。

静的変数Y2が記憶されているのかを確認するため、
message getstaticvariable ("Y2");
という文を追加してみましたが、
メッセージに何も表示されませんでした。

[ ]
RE:08654 setstaticvariable文の使い方No.08655
秀丸担当 さん 18/03/30 10:35
 

getstaticvariableには第2パラメータに0か1を指定する必要があり、省略した場合
は0になります。
setstaticvariableで1を指定した場合は、getstaticvariableでも1を指定する必要が
あります。
例えば以下のようにするといいと思います。

例:

//すべての秀丸エディタで共通の場合
$Y1="入力デフォルトA";
setstaticvariable "Y2", $Y1, 1;
$Y3 = input( "○○", getstaticvariable("Y2",1) );

//現在の秀丸エディタだけの場合
$Y1="入力デフォルトB";
setstaticvariable "Y2", $Y1, 0;
$Y3 = input( "○○", getstaticvariable("Y2",0) );

ヘルプは確かに分かりづらいので、サンプルを記載したいと思います。

[ ]
RE:08655 setstaticvariable文の使い方No.08657
ゆたぽん山 さん 18/03/30 11:09
 
getstaticvariableの第2パラメータを指定したところ、望み通りに動きました。
でるもんた・いいじまさん、秀丸担当さん、ありがとうございました。

[ ]