とりあえず、変数の型が間違っている所は全部直して
かきしすさんに教えて頂いたやり方で、品種の名前を4つ全て表示する事に成功しました。
「果物の在庫一覧表」の値を入れ替えても、ifが正しい判定をしている事も確認しました。
;果物の商品コード一覧表
goto *main
#deffunc SyouHinnCodeHenKan str SyouHinnCode
if SyouHinnCode="1" : HinnSyu="青森りんご"
if SyouHinnCode="2" : HinnSyu="秋田りんご"
if SyouHinnCode="3" : HinnSyu="巨峰"
if SyouHinnCode="4" : HinnSyu="マスカット"
return
*main
;果物の在庫一覧表
sdim FLootList_A
FLootList_A(0)="りんご"
FLootList_A(1)="1"
sdim FLootList_B
FLootList_B(0)="りんご"
FLootList_B(1)="2"
sdim FLootList_C
FLootList_C(0)="ぶどう"
FLootList_C(1)="3"
sdim FLootList_D
FLootList_D(0)="ぶどう"
FLootList_D(1)="4"
;商品コードを品種名に変換
SyouHinnCodeHenKan FLootList_A(1)
FlootList_A_HinnSyu=HinnSyu
SyouHinnCodeHenKan FLootList_B(1)
FlootList_B_HinnSyu=HinnSyu
SyouHinnCodeHenKan FLootList_C(1)
FlootList_C_HinnSyu=HinnSyu
SyouHinnCodeHenKan FLootList_D(1)
FlootList_D_HinnSyu=HinnSyu
;お客様向けの、お品書き
mes FlootList_A_HinnSyu
mes FlootList_B_HinnSyu
mes FlootList_C_HinnSyu
mes FlootList_D_HinnSyu
stop
実用面ではこれで解決なのですが、ゆちポンさんに教えて頂いたやり方も、
変数型の間違いを直して、作り直してみる事にしました。
マニュアルのモジュールの所を読み直したりして、
「今の所、変数名やラベルが重複する所はないので、本質的には同じ」という理解をしました。
(もしかしたら、これ間違ってますか?)
余分なタイプミスがあるといけないので、かきしすさんバージョンを
そのままコピペする感じで、#deffuncの場所だけ移動しましたが、上手く行きません。
どうしてでしょう・・
とにかくmesを入れまくってみました。
;果物の商品コード一覧表
#module "CodeItiRannHyou"
#deffunc SyouHinnCodeHenKan str SyouHinnCode
if SyouHinnCode="1" : HinnSyu="青森りんご" : mes "\n(処理順9-1)"+HinnSyu////////////////OK
if SyouHinnCode="2" : HinnSyu="秋田りんご" : mes "\n(処理順10-1)"+HinnSyu///////////////OK
if SyouHinnCode="3" : HinnSyu="巨峰" : mes "\n(処理順11-1)"+HinnSyu/////////////////////OK
if SyouHinnCode="4" : HinnSyu="マスカット" : mes "\n(処理順12-1)"+HinnSyu///////////////OK
return
#global
;果物の在庫一覧表
sdim FLootList_A
FLootList_A(0)="りんご" : mes "(処理順1)"+FLootList_A(0)///////////////////////////////OK
FLootList_A(1)="1" : mes "(処理順2)"+FLootList_A(1)////////////////////////////////////OK
sdim FLootList_B
FLootList_B(0)="りんご" : mes "(処理順3)"+FLootList_B(0)///////////////////////////////OK
FLootList_B(1)="2" : mes "(処理順4)"+FLootList_B(1)////////////////////////////////////OK
sdim FLootList_C
FLootList_C(0)="ぶどう" : mes "(処理順5)"+FLootList_C(0)///////////////////////////////OK
FLootList_C(1)="3" : mes "(処理順6)"+FLootList_C(1)////////////////////////////////////OK
sdim FLootList_D
FLootList_D(0)="ぶどう" : mes "(処理順7)"+FLootList_D(0)///////////////////////////////OK
FLootList_D(1)="4" : mes "(処理順8)"+FLootList_D(1)+"\n"///////////////////////////////OK
;商品コードを品種名に変換
SyouHinnCodeHenKan FLootList_A(1) : mes "(処理順9-2)"+HinnSyu//////////////////////////NG 値が「0」になっている。デバックウインドウでは変数型がint
FlootList_A_HinnSyu=Hinnsyu : mes "(処理順9-3)"+HinnSyu+FlootList_A_HinnSyu////////////NG HinnSyuもFlootList_A_HinnSyuも値が0になっている。デバックウインドウでは変数型がint
SyouHinnCodeHenKan FLootList_B(1) : mes "(処理順10-2)"+HinnSyu/////////////////////////当然NG
FlootList_B_HinnSyu=HinnSyu : mes "(処理順10-3)"+HinnSyu+FlootList_B_HinnSyu///////////当然NG
SyouHinnCodeHenKan FLootList_C(1) : mes "(処理順11-2)"+HinnSyu/////////////////////////当然NG
FlootList_C_HinnSyu=HinnSyu : mes "(処理順11-3)"+HinnSyu+FlootList_C_HinnSyu///////////当然NG
SyouHinnCodeHenKan FLootList_D(1) : mes "(処理順12-2)"+HinnSyu/////////////////////////当然NG
FlootList_D_HinnSyu=HinnSyu : mes "(処理順12-3)"+HinnSyu+FlootList_D_HinnSyu///////////当然NG
;お客様向けの、お品書き・・・mesが増えるとデバッグが、ややこしいので、一旦無効化。
;
; mes FlootList_A_HinnSyu
; mes FlootList_B_HinnSyu
; mes FlootList_C_HinnSyu
; mes FlootList_D_HinnSyu
stop
見落しの出ないデバッグのやり方は、たぶん自信が付いて来ました。しかし・・
module内の処理はうまく行っているのですが、(処理順 9-2・3 10-2・3 11-2・3 12-2・3)が全滅です。
だからreturnに失敗しているということですね。returnの後に"Hinnsyu"を入れてrefstrで取り出そうとしましたが
このスクリプトで無理矢理そんな事は出来ないようです。
「ユーザー定義命令」を「モジュール定義命令」として分離しただけなのに、何故こうなるのか理解できていないと無意味だし。
どうもデバッグだけの問題ではなくて、私の場合「拡張文法」自体の理解に致命的な勘違いがあるとしか思えないのですが・・。