1

このプロジェクトから抽出されたコード:

Method RefineSearch(pNewCriteria As %String) As %Status [ ZenMethod ]
{
    set tSC = $$$OK
    try {
        set ..criteria = ..criteria _$s(..criteria="":"",1:",")_pNewCriteria

        set tType = $piece(pNewCriteria,":",1)
        if tType="prop" {
            set tSQL = "SELECT ID FROM "_..tableName_" WHERE "_$piece(pNewCriteria,":",2)_" = '"_$piece(pNewCriteria,":",3)_"' AND %ID %FIND Demo_SearchPortal.Find("_..qid_")"
            set tResult = ##class(%SQL.Statement).%ExecDirect(,tSQL)
            while tResult.%Next() {
                set tID = tResult.%GetData(1)
                $$$IFBITOFFPOS(tID,tChunk,tPos)
                set $bit(tBits(tChunk),tPos)=1 // <-- HERE
            }
            // compress bitmaps
            set tMaxChunk=$order(tBits(""),-1)
            for tChunk = 1:1:tMaxChunk {
                set tBits(tChunk) = $bitlogic(tBits(tChunk))
            }
        } else {
            set tFinder = $classmethod(..className, ..indexName_"Embedded")
            if (tType = "entity") {
                do tFinder.PrepareFind("{"_$piece(pNewCriteria,":",2)_"}", ..searchMode)
            } elseif (tType = "word") {
                do tFinder.PrepareFind($piece(pNewCriteria,":",2), ..searchMode)
            }
            merge tOldBits = ^CacheTemp.IF.SearchPortal.Query(..qid,"b")
            set tChunk=""
            for {
                set tBits = tFinder.NextChunk(.tChunk)
                quit:tChunk=""
                set tBits(tChunk)=$bitlogic(tBits & tOldBits(tChunk))
            }
        }

        set tNewQID = $i(^CacheTemp.IF.SearchPortal.Query)
        merge ^CacheTemp.IF.SearchPortal.Query(tNewQID,"b") = tBits
        set ^CacheTemp.IF.SearchPortal.Query(tNewQID, "parent") = ..qid
        set ..qid = tNewQID

    } catch (ex) {
        set tSC = ex.AsStatus()
    }
    quit tSC
}

とマークされた場所では<-- HERE、これが -- の最初の出現であり、tBitsブートへの添え字付きアクセスがあります。

これは本当に合法ですか?

4

1 に答える 1

2

Yes$bitは、コマンドの左側の関数として使用できますSET。この場合、任意の有効な変数も有効です。この変数が未定義の場合、新しい値が取得されます。および$bitも利用可能$pieceで、ドキュメント$extractで確認できます。

于 2016-04-16T06:34:53.453 に答える