0

編集:サンプルコードを簡略化しようとしたときに、誤って問題を誤って伝えました。私のコードの重要な部分は、要素を追加した後に配列をソートしようとしていることです。ハングは挿入ではなくソートで発生します。次の抽象化されたコードは、一貫してハングします。

<?=

local('a' = array)

#a->insert('test1' = map('a'='1'))
#a->insert('test2' = map('b'='2')) // comment-out to make work

#a->sort

#a

?>

次のように、一意のキーごとに値のペアを配列に挿入する結果セットがあります。

resultset(2) => {
    records => {
        if(!$logTypeClasses->contains(field('logTypeClass'))) => {
            local(i) = pair(field('logTypeClass'), map('title' = field('logType'), 'class' = field('logTypeClass')))
            log_critical(#i)
            $logTypeClasses->insert(#i) // Lasso hangs on this line, will return if commented-out
        }
    }
}

奇妙なことに、なげなわが#iぶら下がっていないと、ローカル変数をスレッド変数に挿入できません。エラーが発生することはなく、ページが返されることもありません。無期限にハングするだけです。

ペアが正しくログに記録されていることがわかります。これにより、ペアを生成する構文が正しいと思います。

ペアの値側が値を持つマップでない限り、コードを機能させることができます。つまり、ペアの値側が文字列、または空のマップである場合でも機能します。key=value パラメーターをマップに追加するとすぐに失敗します。

明らかな何かが欠けているに違いありません。ポインタはありますか?お時間をいただき、ご検討いただきありがとうございます。

4

2 に答える 2

1

私はあなたの問題が map コンストラクト自体とのペアであることを疑っています。このテスト コードは期待どおりに動作します。

var(testcontainer = array)

inline(-database = 'mysql', -table = 'help_topic', -findall) => {
    resultset(1) => {
        records => {
            if(!$testcontainer->contains(field('name'))) => {
                local(i) = pair(field('name'), map('description' = field('description'), 'name' = field('name')))
                $testcontainer->insert(#i)
            }
        }
    }
}
$testcontainer

Lasso がこのようにハングアップし、フィードバックがなく、すぐにクラッシュしない場合、通常はある種の無限ループに陥っています。可能な限り参照を使用してなげなわに関係している可能性があると推測しています。コードの一部で、それ自体を参照する参照が使用されている可能性があります。か何か。

于 2014-01-31T09:27:57.190 に答える