[Notes/Domino] Split の戻り値をそのまま関数に渡すと、Notes Client が応答なしになる場合がある
「Split」は R6 から追加された便利な組み込み関数ですが、戻り値をそのまま関数に渡すと Notes Client が応答なしになる場合がある、というとんでもない落とし穴があるみたいです(- -メ
以下にサンプルコードを記載します。
※以下のコードを実行すると、クライアントが応答なしになる場合があります。実行は自己責任にてお願いします。
Sub Initialize Dim r As Variant r = test(Split("aa,bb", ",")) '戻り値を直接関数に渡している Msgbox Join(r, ";") End Sub Function test(arg As Variant) As Variant Dim v As Variant v = arg 'ローカル変数にコピー v(0) = "cc" test = v '戻り値を返している End Function
上記のコメント部分がポイントで、関数内でローカル変数にコピー → 戻り値として返す、という部分も影響している感じです。上記はR6.0.4の結果で、バージョンによっては、「r = test(Split("aa,bb", ","))」の部分を何回も実行する、関数の戻り値で引数とは無関係な配列を戻す、といった条件がないと現象が発生しないかもしれませんが、基本的なポイントは上記のコードのとおりです。
解決策は、以下のように Split の戻り値をそのまま関数に渡さないで、いったん変数におくだけでOKです。
Sub Initialize Dim r As Variant Dim a As Variant a = Split("aa,bb", ",") r = test(a) Msgbox Join(r, ";") End Sub (関数部分はそのままでOK)
わたしはこの原因を調べるのに半日潰しました(もっと複雑なコードだったので)…… 😥 皆さんもご注意を……。
コメント
コメントはありません
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。