SRC質問掲示板Mk2
(現在 過去ログ104 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■18934 / inTopicNo.1)  必ず呼ばれないサブルーチンの引数参照に関して
  
□投稿者/ 匿名希望 -(2006/07/31(Mon) 14:43:54) [ID:2eMbhZ9o]
    2006/07/31(Mon) 14:50:25 編集(投稿者)
    2006/07/31(Mon) 14:50:19 編集(投稿者)


    必ず呼ばれないサブルーチンの引数参照に関して

    ↓サブルーチン例ここから

    Call(サブルーチンA,X,Y,Z)

    Call(サブルーチンB,Call(サブルーチンA,X,Y,Z),J,X)

    Call(サブルーチンB,I,J,X)

    ↑サブルーチン例ここまで

    上記のようなサブルーチンがあります。文字が同じ引数は同じ文字列という意味です。

    サブルーチン「サブルーチンB」の引数である「X」を
    サブルーチン「サブルーチンB」の引数としてだけでなく
    サブルーチン「サブルーチンA」で呼び出された引数「X」としても
    サブルーチン「サブルーチンB」で使用したいのですが、どうすればいいのでしょうか。

    サブルーチン「サブルーチンA」は数値を算出するサブルーチンで
    変数に代入してその変数に数値を足したり引いたりして使用します。

    サブルーチン「サブルーチンB」はサブルーチン「サブルーチンA」で算出された数値を基に
    引数「I」や引数「J」、引数「X」の結果にしたがって特定の文字列を算出します。
    引数「I」にはサブルーチン「サブルーチンA」で算出された数値を代入した変数が入ります。

    サブルーチン「サブルーチンA」は必ず呼ばれるわけではないので、
    UpVarコマンドは使うに使えないのです。
    スマートな方法でなくてもいいので、教えてください。
引用返信/返信 削除キー/
■18935 / inTopicNo.2)  Re[1]: 必ずしも呼ばれないサブルーチンの引数参照に関して
□投稿者/ 中箱 -(2006/07/31(Mon) 19:48:12) [ID:7vERprld]
    2006/07/31(Mon) 19:48:42 編集(投稿者)

    どうも、中箱と申します。

    必ずしも呼ばれないサブルーチンの引数参照、との事ですが
    こちらが、正確に文意を読み取れているかあまり自信は無いのですが・・

    結局、「サブルーチンB」がCallされた際、
    「I」が引数として指定された場合はそのまま「I」を用い、
    「I」が省略された場合は「I」に代わる値として、サブルーチンAをCallすれば良いわけですよね?


    では、サブルーチンBに用いる引数の順番を変え、
    引数「I」を省略しても動作するようにしてみてはどうでしょう。

     Call(サブルーチンB,J,X[,I])
    のように書けば少しは分かりやすいでしょうか・・?



    具体的には、

    #-----サブルーチン中身ここから-----
    サブルーチンB:

    #---Iが省略された場合
    if Args(3) = "" then
    Local 引数アイ = Call(サブルーチンA,Args(2),Y,Z)

    #   ここで「X」は、サブルーチンBの2つ目の引数として使われているので、
    #   Args(2) = X になっている。


    #---Iが引数として使われた場合
    else
    Local 引数アイ = Args(3)

    endif

    #以下、サブルーチンBの中身
    #Args(3)の代わりに、ローカル変数「引数アイ」を用いる

    return (返り血)

    #-----中身ここまで-----


    のような感じになるかと。
    ・・少々そちらが気にしておられる点とは違っているような気もするのですが・・。


    読み違えがありましたらすいません。
    では
引用返信/返信 削除キー/
■18936 / inTopicNo.3)  Re[2]: 必ずしも呼ばれないサブルーチンの引数参照に関して
□投稿者/ 匿名希望 -(2006/07/31(Mon) 20:03:02) [ID:2eMbhZ9o]
    ↓サブルーチン例ここから

    Call(サブルーチンA,X,Y,Z)

    Call(サブルーチンB,Call(サブルーチンA,X,Y,Z),J,X)

    Call(サブルーチンB,I,J,X)

    ↑サブルーチン例ここまで

    引数「I」は私が親記事No.18934で言っている
    「サブルーチン「サブルーチンA」で算出された数値を代入した変数」に該当します。
    説明不足でしたか?

    引数「I」を省略するわけではありません。
    もともとサブルーチン「サブルーチンA」で算出された数値を代入するところを
    変数「I」を引数とすることでサブルーチン再帰回数を削減しています。

    テストではそのまま呼び出しているのですが、
    サブルーチン「サブルーチンA」とサブルーチン「サブルーチンB」は
    もともと直接呼び出されないことを前提としています。

引用返信/返信 削除キー/
■18938 / inTopicNo.4)  Re[3]: 必ずしも呼ばれないサブルーチンの引数参照に関して
□投稿者/ 中箱 -(2006/07/31(Mon) 21:55:02) [ID:7vERprld]
    2006/07/31(Mon) 21:55:39 編集(投稿者)

    ・・んー、
    >サブルーチン「サブルーチンB」の引数である「X」を
    >サブルーチン「サブルーチンB」の引数としてだけでなく
    >サブルーチン「サブルーチンA」で呼び出された引数「X」としても
    >サブルーチン「サブルーチンB」で使用したい
    の部分の意味を最初に確認しておくべきだったかもしれません。
    先走ってすいません。


    ただ、
    "「サブルーチンA」で呼び出された引数" と言われましても、引数は呼び出すものではありませんし。
    "「サブ(略)A」の引数「X」" もしくは、
    "「(略)A」を呼び出すのに使われた引数「X」" なら分かるのですが。



    とりあえず、UpVarコマンドとのことですが、
    ・・・ええと、「A」の中で「B」をCallするのですか?
    そうでなければ、UpVerコマンドを使う意味が無いと思います。
    (この説明から考えて、「B」の中で「A」をCallした上でUpVerするのは無意味かと)

    それに、「A」の中で「B」をCallするのであっても、
    「B」内で「B」の引数に含まれない「A」の引数「Y」や「Z」を参照するためにはUpVerコマンドは必要でしょうけれど、
    「B」の引数として「X」が使われるのならば、わざわざ
    >サブルーチン「サブルーチンA」で呼び出された引数「X」
    として扱う必要は無いように思います。

    サブルーチンBの引数「X」と、サブルーチンAの引数「X」が同じなのでしたら、
    >サブルーチン「サブルーチンB」の引数「X」
    >サブルーチン「サブルーチンA」で呼び出された引数「X」
    にも違いは無いわけですし。



    ともあれ、
    「A」の中から「B」をCallされた場合に限ってUpVerコマンドを使うのであれば、
    UpVerコマンドを使うかどうか判別するための「B」の引数を一つ増やして
     Call(サブルーチンB,I,J,X,N)
    のようにし、
    「A」の中からCallする場合には Call(サブルーチンB,I,J,X,1)
    「A」の中からではなくCallする場合には Call(サブルーチンB,I,J,X,0)
    とする。
    そしてサブルーチンB内で、
     if Args(4) then
     UpVer
     endif
    を実行するようにすれば、「A」が関わった時のみUpVerコマンドが実行される事になります。


    ヘルプの読み違えなど、初歩的なミスが無ければ良いのですが・・。
    では。
引用返信/返信 削除キー/
■18942 / inTopicNo.5)  Re[4]: 必ずしも呼ばれないサブルーチンの引数参照に関して
□投稿者/ 匿名希望 -(2006/08/01(Tue) 05:58:01) [ID:2eMbhZ9o]
    ↓サブルーチン例ここから

    Call(サブルーチンA,X,Y,Z)

    Call(サブルーチンB,Call(サブルーチンA,X,Y,Z),J,X)

    Call(サブルーチンB,I,J,X)

    ↑サブルーチン例ここまで

    サブルーチン「サブルーチンA」は
    上記の2つ目のような使い方もするということです。
    テストではこうしていますが、これはすぐに結果がわかるからです。

    しかし、上記の2つ目のような使い方をして始めてUpVarコマンドは機能するのですよね?
    それとも全く違いますか?

    私がしたいのは
    「どんな引数を指定していたかの情報を変数に代入してからも取得したい」
    ということです。
    やっぱり無理なんでしょうか。

    UpVarコマンドが使えるのであれば使います。
    ただそのコマンドの使用は絶対というわけではありません。
    スマートな方法でなくてもいいので、教えてください。
引用返信/返信 削除キー/
■18943 / inTopicNo.6)  Re[5]: 必ずしも呼ばれないサブルーチンの引数参照に関して
□投稿者/ 中箱 -(2006/08/01(Tue) 14:47:43) [ID:7vERprld]
    >Call(サブルーチンA,X,Y,Z)
    >Call(サブルーチンB,Call(サブルーチンA,X,Y,Z),J,X)
    >Call(サブルーチンB,I,J,X)

    >サブルーチン「サブルーチンA」は
    >上記の2つ目のような使い方もするということです。

    >しかし、上記の2つ目のような使い方をして始めてUpVarコマンドは機能するのですよね?
    >それとも全く違いますか?


    はい、全く違います。
    >Call(サブルーチンB,Call(サブルーチンA,X,Y,Z),J,X)
    という形で実行させた場合ですよね?
    そうでないのなら、より適切に表現を改めてくださいお願いします。

    まずヘルプのUpVarコマンドを熟読し、
    そしてどういう構造が「サブツーリンの中から別のサブルーチンを呼び出す」というものなのかの認識を改めてください。
    どうやらそこの認識からして間違っているようですので。(ヘルプのUpVarコマンド項の例を見れば多少は分かるかと)

    少なくとも、
    >Call(サブルーチンB,Call(サブルーチンA,X,Y,Z),J,X)
    では「サブルーチンを呼び出したサブルーチン」というものは存在しません。


    なにより、実際にUpVarコマンドを実行して試してみれば
    UpVarコマンドが何の効果も発揮せず、エラーにもならない、という事が分かったと思いますが?
    たとえ動作を試してエラーが出た所で、あなたのパソコンがクラッシュするわけでも自作のデータが壊れるわけでも無いのですから。


    質問するなとはいいませんが、
    「機能するのですよね?」などと他人に確認するよりは、
    実際に自分で機能するかどうかを試した方が、結論を素早く得られるとは思わなかったのですか?

    もちろん、機能するかどうかを試す方法が分からない、という事であれば話は別ですがあなたは違いますよね?
    (わからないのであれば大変失礼しました)



    >「どんな引数を指定していたかの情報を変数に代入してからも取得したい」
    これもどういう状況を想定しているのかが分かりづらいのですが・・

     I = Call(サブルーチンA,X,Y,Z)
    とした後、
    「I」以外の変数を用いずに「X」「Y」「Z」が出せるか
    という事ですか?

    (そちらの意図を汲めていない可能性がありますので、
     意図を確信できるまで、これについての結論は控えさせていただきます)



    最後に細かい所をいくつか。

    毎レスごとに文頭に付けている
    >サブルーチン例
    ですが、
    正確には「サブルーチン呼び出し例」だと思われます。

    タイトルについては私の一つ目のレスで無断で変更しちゃいました。今更ですが失礼。
    (「必ず呼ばれないサブルーチンの引数」って「絶対に呼ばれないサブルーチンの引数」って意味ですよ)


    文章表現の間違いというものは、意図が読み手に間違って伝わる可能性が高いものです。
    きちんと自分の伝えたい内容になった文章になっているか、改めて注意してください。
    では
引用返信/返信 削除キー/
■18944 / inTopicNo.7)  Re[6]: 必ずしも呼ばれないサブルーチンの引数参照に関して
□投稿者/ 匿名希望 -(2006/08/01(Tue) 15:56:29) [ID:2eMbhZ9o]
    UpVarコマンドに関しては完全に私の読み違えでした。
    すみません。

    変数「I」に関しては
    中箱さんの解釈でOKです。

    いい方法は無いのでしょうか。
引用返信/返信 削除キー/
■18946 / inTopicNo.8)  Re[7]: 必ずしも呼ばれないサブルーチンの引数参照に関して
□投稿者/ 中箱 -(2006/08/01(Tue) 16:42:35) [ID:7vERprld]
    自分の書いたものですが、
    > I = Call(サブルーチンA,X,Y,Z)
    >とした後、
    >「I」以外の変数を用いずに「X」「Y」「Z」が出せるか

    これは無理です。
    サブルーチンから帰ってきた値(文字列)は、その値(文字列)であること以外の情報を一切持ちません。


    例えば、「Call(サブルーチンA,0,0,0)」の結果が「1」である時、
     I = Call(サブルーチンA,0,0,0)
    とした場合の「I」の値と
     I = 1
    とした場合の「I」の値とは全く同一のものです。違いは何もありません。



    サブルーチンA内や、サブルーチン外で個別に
    「A」に使った引数XYZを、(Localではない)変数・配列に代入しておくしかないと思います。


    では。
引用返信/返信 削除キー/
■18948 / inTopicNo.9)  Re[8]: 必ずしも呼ばれないサブルーチンの引数参照に関して
□投稿者/ 匿名希望 -(2006/08/01(Tue) 20:49:23) [ID:2eMbhZ9o]
    どうやらそれ以外にほうほうはなさそうですね。

    中箱さん、ありがとうございました。
解決済み!
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -